feat(屏蔽): 贫矿脉地形变异删行——用户令「特异关卡后续重新设计,先屏蔽」(2026-10-16)
- variation.tres 删 skewed_veins 行(scope=global/resource_face/effect_value=30): Boss/精英图全局池空 → _resolve_global_variant 空行回落 → region 布置原路兜底, 玩家面零横幅零角标零资源偏斜;删行依据与首发批裁决记录改写为屏蔽注记(git 历史可溯) - smoke_all.gd 7 处断言换代为「全局池空→region 兜底回落」路径: 行数 7→6 / boss 池去 skewed_veins / L2 boss+elite 全局决议改断言空行 / Boss 图改断言恰一行 region 变异+格子级布置恢复+取号恢复 / 快照投影与板载一致 / 同种子确定性(region 路径);节头与 print 同步换代 - resource_face 机制代码(RewardEconomy 偏斜投影/schema 互锁/负样本)零触碰, 重建设计直接加行即可
This commit is contained in:
1 parent
e8ceb27243
commit
9723c1524b
2 files changed
+24
-34
No files matched your search
@@ -73,17 +73,6 @@ 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 用户拍板)——四行两轴×两关:
|
||||
@@ -110,9 +99,9 @@ rows = [{
|
||||
; 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 归出口追认单。
|
||||
; 屏蔽记录(2026-10-16 用户令):skewed_veins 贫矿脉行已删除——用户裁「地形变异特异关卡后续重新做
|
||||
; 设计,先屏蔽」。删除后 Boss/精英图全局池空 → _resolve_global_variant 空行回落 → region 布置原路
|
||||
; 兜底(battle_orchestrator.gd 既有回落路径),玩家面零横幅零角标零资源偏斜。删除行内容与首发批
|
||||
; 裁决依据(2026-10-04 迭代 14 ③号卡:案A 资源面微贫向偏斜、effect_value=30 provisional、域 [0,50]、
|
||||
; 0=中性 off 锚)见 git 历史;resource_face 机制代码(RewardEconomy 偏斜投影/schema 互锁/负样本
|
||||
; 断言)全部保留,重建设计直接加行即可。
|
||||
+18
-17
@@ -2245,8 +2245,8 @@ func _mk_stream(stream_name: String, scope: int) -> RandomNumberGenerator:
|
||||
|
||||
func _smoke_variation_framework() -> void:
|
||||
print("--- 地形变异 框架面(首批四类型 + 候选池门控 + 跨字段互锁)---")
|
||||
check(_db.variation.rows.size() == 7, "变异清单 7 行(荆棘丛/藤蔓缠绕/岩浆/烬覆 + 落石/矿尘 + 贫矿脉——首批类型定稿批 + 第三关内容批 + 全局作用域变异首发批)")
|
||||
check(_db.variation.validate().is_empty(), "变异表校验零错误(7 行全过域与跨字段互锁——含 scope=global 三互锁)")
|
||||
check(_db.variation.rows.size() == 6, "变异清单 6 行(荆棘丛/藤蔓缠绕/岩浆/烬覆 + 落石/矿尘——首批类型定稿批 + 第三关内容批;贫矿脉 2026-10-16 用户令屏蔽删行)")
|
||||
check(_db.variation.validate().is_empty(), "变异表校验零错误(6 行全过域与跨字段互锁——含 scope=global 三互锁负样本)")
|
||||
var pool1_ids: Array = []
|
||||
for r in _db.variant_pool(1, "dungeon"):
|
||||
pool1_ids.append(String(r.variant_id))
|
||||
@@ -2280,10 +2280,10 @@ func _errs_has_cross_field(errs: Array) -> bool:
|
||||
return false
|
||||
|
||||
|
||||
# ---- 全局作用域变异 首发批断言面(2026-10-04 迭代 14 ③号卡——T0-T5 集中:互锁/门控三维/
|
||||
# 替换制/零取号/资源面偏斜守恒与合成序/快照投影/呈现面锚)----
|
||||
# ---- 全局作用域变异 断言面(2026-10-04 迭代 14 ③号卡首发批立面;2026-10-16 用户令屏蔽贫矿脉删行后
|
||||
# 改测「全局池空 → region 兜底回落」路径——互锁负样本/门控三维/资源面偏斜守恒与合成序/快照投影不变)----
|
||||
|
||||
# 取号计数桩(variant_place 零取号断言——子类拦截计数,派生与取数语义零改动)
|
||||
# 取号计数桩(variant_place 取号断言——子类拦截计数,派生与取数语义零改动)
|
||||
class _CountVariantRng extends RngServiceCore:
|
||||
var variant_calls := 0
|
||||
func open_stream(purpose: String) -> RandomNumberGenerator:
|
||||
@@ -2302,7 +2302,7 @@ class _BoardRowStub:
|
||||
|
||||
|
||||
func _smoke_global_variant() -> void:
|
||||
print("--- 全局作用域变异 首发批(门控三维 + 替换制 + 资源面偏斜)---")
|
||||
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",
|
||||
@@ -2334,7 +2334,7 @@ func _smoke_global_variant() -> void:
|
||||
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 ∅ 通配)")
|
||||
check(pool_boss_ids == ["magma", "ash"], "门控三维:L2 underdark boss 池 = region 两行(贫矿脉 2026-10-16 屏蔽删行后无 global 行)")
|
||||
var pool_battle_ids: Array = []
|
||||
for r in _db.variant_pool(2, "underdark", "battle"):
|
||||
pool_battle_ids.append(String(r.variant_id))
|
||||
@@ -2343,31 +2343,32 @@ func _smoke_global_variant() -> void:
|
||||
"门控三维:缺省双参调用 = 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(2, "underdark", "boss").is_empty(), "全局决议: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 零消费
|
||||
check(_db.global_variant_row(2, "underdark", "elite").is_empty(), "elite 前向词位:boss 同池恒空(贫矿脉屏蔽后——词表位不造行)")
|
||||
# ③ 兜底回落:全局池空 → Boss 图改走 region 候选池(恰一行 region 变异 + 格子级布置 + 正常取号)
|
||||
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 节点——替换制断言载体)")
|
||||
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 零消费(全局取用确定性)")
|
||||
check(bb.board_variant_ids().size() == 1 and (String(bb.board_variant_ids()[0]) in ["magma", "ash"]),
|
||||
"屏蔽后回落:Boss 图改走 region 候选池(恰一行 region 变异,无全局型——全局池空回落路径)")
|
||||
check(not bb.variants.is_empty(), "屏蔽后回落:Boss 图恢复 region 变异格布置(原替换制跳过 region 的逻辑随全局池空失效)")
|
||||
check(crng.variant_calls > 0, "屏蔽后回落:variant_place 恢复取号(原全局取用零取号态消失)")
|
||||
var snap: Dictionary = boss_settlement.presentation_snapshot()
|
||||
check(_arr_str_eq(snap.get("board_variants", []), ["skewed_veins"]), "快照投影:board_variants 呈现面(横幅/角标唯一读取面)")
|
||||
check(_arr_str_eq(snap.get("board_variants", []), bb.board_variant_ids()), "快照投影:board_variants 与板载 region 行一致(横幅/角标唯一读取面)")
|
||||
# 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/取号逐位相同")
|
||||
check(_arr_str_eq(bb2.board_variant_ids(), bb.board_variant_ids()) and crng2.variant_calls == crng.variant_calls,
|
||||
"确定性:同种子 Boss 图两遍 board_variants/取号逐位相同(region 布置路径)")
|
||||
# ④ 资源面偏斜投影(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()
|
||||
|
||||
Reference in new issue
Block a user