test(迁移): 批 B 波 1 G4 套1 敌方攻击类型轴四条迁入 roll_multiplier_test.gd——新宿主落位+manifest 登记+剪切挂载绿+按条变异 4/4 验红(表列越轨/快照清空连带载荷矩阵/载荷置空/矩阵查表短路各验红);smoke_all.gd 同批删函数节头与调用行;闸01 剩余面 1015 绿
This commit is contained in:
1 parent
5f190bc354
commit
fdb77ffeea
4 files changed
+101
-62
No files matched your search
@@ -153,7 +153,6 @@ var _rng
|
||||
func _run_core_smoke(db, rng) -> void:
|
||||
_db = db
|
||||
_rng = rng
|
||||
_smoke_enemy_attack_type()
|
||||
_smoke_armor_roll()
|
||||
_smoke_pool_wiring()
|
||||
_smoke_type_glow()
|
||||
@@ -1399,67 +1398,6 @@ func _smoke_level() -> void:
|
||||
"模拟后 hero 表恢复基线(atk=%d hp=%d ac=%d——对配置快照)" % [int(_db.hero.atk), int(_db.hero.max_hp), int(_db.hero.armor_class)])
|
||||
|
||||
|
||||
# ---- 敌方攻击类型轴(表列/单位快照/单据载荷/矩阵命中证词)----
|
||||
# 克制矩阵命中证词 = 同种子三甲型配对实测(不是查表存在性证词):同种子下 armor_roll 流消费逐位一致、
|
||||
# 阈值(hero armor_class)不变,三甲型唯一差异 = 克制点数 cdelta(normal_vs_light 0 / heavy −1 / ward +1)
|
||||
# → heavy 伤害 == light −1、ward == light +1(要求基线伤害 ≥ 2——地板 1 会吞 −1 位移)。
|
||||
# 承伤位移红线(卡片 §8 L3):全局位移只允许 ±1 量级——非此量级 = 矩阵消费面有未盘点的第二落点(停机)。
|
||||
func _smoke_enemy_attack_type() -> void:
|
||||
print("--- 敌方攻击类型轴(迭代 24 N3)---")
|
||||
# ① 表列:20 行全填 normal(N3 全填不做差异化——Q9)
|
||||
var at_ok := true
|
||||
var at_detail := ""
|
||||
for row in _db.enemy.rows:
|
||||
var at := String(row.get("attack_type", ""))
|
||||
if at != "normal":
|
||||
at_ok = false
|
||||
at_detail += " %s:%s" % [String(row.get("enemy_id", "?")), at]
|
||||
check(at_ok, "敌方 %d 行 attack_type 全填 normal(迭代 24 N3 轴开列,越轨行%s)" % [
|
||||
_db.enemy.rows.size(), at_detail if at_detail != "" else "无"])
|
||||
# ②③④ 矩阵命中证词扫描:(3,0) 灰矮人 atk 区间 [2,4] 基线足够((1,2) 熊地精 atk 1 会塌地板);
|
||||
# 同 seed 三甲型各开一场、各取首个敌方伤害行,对拍 ±1。
|
||||
var matrix_found := false
|
||||
var snap_ok := true
|
||||
var payload_at := ""
|
||||
var t_light := -1
|
||||
var t_heavy := -1
|
||||
var t_ward := -1
|
||||
for seed_offset in range(40):
|
||||
var totals := {}
|
||||
for armor in ["light", "heavy", "ward"]:
|
||||
var rng = load("res://core/rng_service.gd").new()
|
||||
rng.set_master_seed(20261013 + seed_offset)
|
||||
var settlement = load("res://core/battle_orchestrator.gd").new(_db, rng)
|
||||
var rows: Array = []
|
||||
settlement.step_row.connect(func(row): rows.append(row))
|
||||
if not settlement.begin_battle({"level_index": 3, "node_depth": 0, "hero_hp": int(_db.hero.max_hp), "armor_type": armor}):
|
||||
totals[armor] = -1
|
||||
continue
|
||||
if armor == "light":
|
||||
for u in settlement._enemy_system.all_enemies():
|
||||
if String(u.get("attack_type", "")) == "":
|
||||
snap_ok = false
|
||||
settlement.minesweeper.settle_batch([{"action": "stop"}])
|
||||
for row in rows:
|
||||
if String(row.get("type", "")) == "damage" and String(row.get("source_class", "")) == "enemy_action":
|
||||
totals[armor] = int(row.get("value", 0))
|
||||
if armor == "light":
|
||||
payload_at = String(row.get("attack_type", "")) # 载荷摊平在行顶层(_emit_row 摊平 extra)
|
||||
break
|
||||
if not totals.has(armor):
|
||||
totals[armor] = -1
|
||||
if int(totals.get("light", -1)) >= 2 and int(totals.get("heavy", -1)) >= 1 and int(totals.get("ward", -1)) >= 1:
|
||||
t_light = int(totals["light"])
|
||||
t_heavy = int(totals["heavy"])
|
||||
t_ward = int(totals["ward"])
|
||||
matrix_found = (t_heavy == t_light - 1 and t_ward == t_light + 1)
|
||||
break
|
||||
check(snap_ok, "敌方单位快照 attack_type 非空(spawn 注入面——迭代 24 N3)")
|
||||
check(matrix_found and t_light >= 2,
|
||||
"克制矩阵命中证词:同种子三甲型实测 heavy %d == light %d − 1 · ward %d == light %d + 1(迭代 24 N3 全局平移 −1/0/+1)" % [
|
||||
t_heavy, t_light, t_ward, t_light])
|
||||
check(payload_at == "normal", "敌方伤害技单据载荷 attack_type 非空(= %s——第 9 参传值面,迭代 24 N3)" % payload_at)
|
||||
|
||||
|
||||
# ---- 护甲等级掷点·行为面(折扣档分布 / nat20 暴击 / 伤害下限 / 棋盘来源必中)----
|
||||
|
||||
|
||||
Reference in new issue
Block a user