feat(迭代35覆盖批·同批落): 生成图深度扩面的敌/板表覆盖落地+S5/V11 覆盖断言——用户授权本批随卡② 同批落(卡② §0 原文允许「须先落或与本卡同批落」),数值按现有曲线插值全 provisional
- enemy.tres:战斗带顶扩到各关最大生成深度(L1 3→6、L2 7→9、L3 7→13,共 3 行);Boss 行按终点深度分带使多终点解析带键互异(L1 加 6、L2 加 8、L3 加 11/12/13,共 5 行);敌种一律复用在册 id(零新内容),AC 全部留在已裁带宽(杂鱼 0~5/Boss 8~12),模板时代带键 0-3/4/9 与 hobgoblin 留任位不动 - board_gen.tres:node_depth 键域补齐 0–6/0–9/0–13(新增 12 行,其余字段按该关同档行复制) - 断言面:level_shop_economy_test 新增 _smoke_generated_coverage 三条〔v11〕(生成图每 battle/boss 深度经 resolve_enemy_rowset 解析非空=顶 clamp 消解禁/每深度 board_gen 精确命中且 node_depth 等值/多终点 Boss 解析带键两两互异),扫描面=三关参数档×种子 42–61,量程读数 L1 0–6、L2 0–9、L3 0–13 - 旧断言随动三条(声明于此,非静默改判):table_structure_guard 〔fv11〕行数与键序 20→28 换代为覆盖表序、〔fv13〕「三关 Boss 各恰一行=图 Boss 深度」换为 Boss 带键覆盖表清单(多终点必然多行,互异判据移交〔v11〕);level_shop_economy 混编段基线行数 20→28、深度 8 的板侧「无行残留」改判「覆盖行在册」(战斗侧仍禁 (L,battle,8) 精确键)
This commit is contained in:
1 parent
99e1b20ba6
commit
9214ef8e02
4 files changed
+467
-23
No files matched your search
@@ -37,9 +37,60 @@ func _init() -> void:
|
||||
_smoke_shop_room()
|
||||
_smoke_shop_graph()
|
||||
_smoke_shop_pool()
|
||||
_smoke_generated_coverage()
|
||||
quit(Kit.finish("level_shop_economy_test"))
|
||||
|
||||
|
||||
# ---- 生成图深度扩面覆盖断言(迭代 35 卡② S5/V11——节点源=卡① 生成器产图,
|
||||
# 敌侧/板侧解析一律走 ConfigDB 真实消费链,禁直读行集自算)----
|
||||
|
||||
func _smoke_generated_coverage() -> void:
|
||||
var RngScript := preload("res://core/rng_service.gd")
|
||||
var GenScript := preload("res://core/node_map_generator.gd")
|
||||
var gen = GenScript.new(RngScript.new())
|
||||
var enemy_ok := true
|
||||
var board_ok := true
|
||||
var boss_band_ok := true
|
||||
var readings := []
|
||||
for L in [1, 2, 3]:
|
||||
var params: Dictionary = _db.level_gen_params_row(L)
|
||||
if params.is_empty():
|
||||
Kit.check("L%d 参数档缺行(覆盖断言无源可扫)〔v11〕" % L, false)
|
||||
continue
|
||||
var dmin := 999
|
||||
var dmax := 0
|
||||
for seed_val in range(42, 62):
|
||||
var g: Dictionary = gen.generate(params, seed_val)
|
||||
var by_id := {}
|
||||
for n in g["nodes"]:
|
||||
by_id[int(n["id"])] = n
|
||||
for n in g["nodes"]:
|
||||
var d: int = int(n["depth"])
|
||||
dmin = mini(dmin, d)
|
||||
dmax = maxi(dmax, d)
|
||||
var kind := String(n["type"])
|
||||
if kind == "battle" or kind == "boss":
|
||||
if _db.resolve_enemy_rowset(L, d, "boss" if kind == "boss" else "battle").is_empty():
|
||||
enemy_ok = false
|
||||
var board: Dictionary = _db.resolve_board_gen(L, d)
|
||||
if board.is_empty() or int(board.get("node_depth", -1)) != d:
|
||||
board_ok = false
|
||||
var bands := []
|
||||
for tid in g["terminals"]:
|
||||
var bd: int = int(by_id[int(tid)]["depth"])
|
||||
var rs: Array[Dictionary] = _db.resolve_enemy_rowset(L, bd, "boss")
|
||||
bands.append(int(rs[0].get("depth_band", -1)) if not rs.is_empty() else -1)
|
||||
for i in range(bands.size()):
|
||||
for j in range(i + 1, bands.size()):
|
||||
if bands[i] == bands[j]:
|
||||
boss_band_ok = false
|
||||
readings.append("L%d 深度域 %d–%d" % [L, dmin, dmax])
|
||||
print("[v11] 生成图覆盖量程读数:" + "; ".join(readings))
|
||||
Kit.check("生成图每个 battle/boss 节点深度在敌表解析到非空行集(顶 clamp 消解禁)〔v11〕", enemy_ok)
|
||||
Kit.check("生成图每个节点深度在 board_gen 精确命中(非空且 node_depth 等值)〔v11〕", board_ok)
|
||||
Kit.check("多终点 Boss 各终点解析带键两两互异(L2/L3×20 种子)〔v11〕", boss_band_ok)
|
||||
|
||||
|
||||
# ---- 关卡节点地图·线性推进冒烟----
|
||||
|
||||
func _smoke_level() -> void:
|
||||
@@ -335,7 +386,7 @@ func _smoke_level_graph() -> void:
|
||||
_db.enemy.rows.remove_at(_db.enemy.rows.size() - 1)
|
||||
_db.enemy.rows.remove_at(_db.enemy.rows.size() - 1)
|
||||
_db.enemy.rows.remove_at(_db.enemy.rows.size() - 1)
|
||||
Kit.check("混编断言段注入行全量还原(表回 20 行——首批混编投放后基线行数,迭代 18 卡⑤;后续断言面零污染)", int(_db.enemy.rows.size()) == 20)
|
||||
Kit.check("混编断言段注入行全量还原(表回 28 行——迭代 35 生成图深度扩面覆盖批后的基线行数;首批混编投放基线 20 行+覆盖 8 行)", int(_db.enemy.rows.size()) == 28)
|
||||
|
||||
# ⑬ 真图类型可见性(信息迷雾 v2.1):L2 入口停点纯核心面读数——候选 ⊆ 可见集 /
|
||||
# Boss 恒可见 / 层距 > N 的非豁免节点入雾。N 取数据表(代码零硬编码)。
|
||||
@@ -710,7 +761,11 @@ func _smoke_shop_graph() -> void:
|
||||
en_keys["%d_%s_%d" % [int(row.level_index), String(row.get("row_kind", "")), int(row.get("depth_band", -1))]] = true
|
||||
for L in [2, 3]:
|
||||
Kit.check("(%d,boss,9) Boss 行在 board_gen + enemy 精确存在" % L, bg_keys.has("%d_9" % L) and en_keys.has("%d_boss_9" % L))
|
||||
Kit.check("(%d,battle,8) 商店房无板/战斗行集残留(陈旧行已清理)" % L, not bg_keys.has("%d_8" % L) and not en_keys.has("%d_battle_8" % L))
|
||||
# 迭代 35 生成图深度扩面覆盖批随动(旧判据属模板时代:深度 8 = 商店房专属位,故禁板行与战斗行):
|
||||
# 生成图下深度 8 是正常可行深度 ⇒ 板侧改判「覆盖行在册」;战斗侧仍禁 (L,battle,8) 精确键
|
||||
#(战斗落带经顶带 9/13 解析,不落 8 号精确键——两侧判据都保留,只按现行设计换正负号)。
|
||||
Kit.check("(%d,8) 板侧生成图覆盖行在册·(%d,battle,8) 战斗精确键仍不存在" % [L, L],
|
||||
bg_keys.has("%d_8" % L) and not en_keys.has("%d_battle_8" % L))
|
||||
Kit.check("L1 行集零改动(单链 Boss (1,4)——教学期最小修订面)", bg_keys.has("1_4") and en_keys.has("1_boss_4") and not bg_keys.has("1_8") and not en_keys.has("1_battle_8"))
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user