iter50-卡1:卡A(敌方状态个体化): 容器换代owner_key多桶(个体键单点/授予写点3处/死亡清/消费面随动/呈现逐卡)+断言V1-V8+armor_roll申报换代(个体键读数语义保留)+主角侧回归绿; 单元71套件+冒烟15项全绿

This commit is contained in:
DKChan committed 2026-11-03 06:31:04 +08:00
1 parent ab5d75a208
commit e658492703
300 files changed
+609 -6039

No files matched your search

@@ -23,6 +23,7 @@ func _init() -> void:
_test_phase_text_nonempty()
_test_boss_name_uses_boss_rowset()
_test_level_clear_wording()
_test_snapshot_effects_per_unit()
quit(Kit.finish("battle_narrator_test"))
@@ -99,3 +100,39 @@ func _test_level_clear_wording() -> void:
{"cleared": false, "result": "failed", "levels_cleared": 1, "stopped_at": 2, "keystone_total": 4, "master_seed": 42})
Kit.check("冒险摘要完成关数行(实际「%s」)〔口径换代 V3〕" % summary,
summary.contains("完成 1 关 · 止步第 2 层") and not summary.contains("通关"))
# ---- 呈现各读各的(增益状态 v1.5——敌方状态个体化批)----
# 真实入口=呈现状态快照函数 presentation_snapshot:A 有削弱 B 无 → 两卡投影各现各的(零共享引用)
func _test_snapshot_effects_per_unit() -> void:
var db = load("res://core/config_db.gd").new()
Kit.check("V8 前置:表加载零 error", db.load_tables("res://data/tables", true) and db.diagnostics_count("error") == 0)
var rng = load("res://core/rng_service.gd").new()
rng.set_master_seed(20261103)
var settlement = load("res://core/battle_orchestrator.gd").new(db, rng)
# depth 3 = hobgoblin 行集 2-3 只——两卡对照面
var open_ok: bool = settlement.begin_battle({"level_index": 1, "node_depth": 3, "hero_hp": int(db.combat.hero.max_hp)})
Kit.check("V8 前置:开局(L1 depth3 双敌行集)", open_ok)
if not open_ok:
return
var enemies: Array = settlement._enemy_system.all_enemies()
var dual_ok: bool = enemies.size() >= 2
Kit.check("V8 前置:≥2 敌(两卡对照面)", dual_ok)
if not dual_ok:
return
var sc = load("res://core/status_container.gd")
var src := {"source_class": "seal_hit", "origin_cell": Vector2i(-1, -1), "round_index": 0}
Kit.check("V8 前置:A 敌受理削弱(B 敌不授)", settlement._status_effects.apply_effect("weaken", sc.owner_key_for(enemies[0]), src))
var snap: Dictionary = settlement.presentation_snapshot()
var e1_effects: Array = snap.enemies[0].effects
var e2_effects: Array = snap.enemies[1].effects
var e1_has := false
for e in e1_effects:
if String(e.effect_id) == "weaken":
e1_has = true
var e2_has := false
for e in e2_effects:
if String(e.effect_id) == "weaken":
e2_has = true
Kit.check("A 有削弱 B 无 → 两卡投影各现各的(A 卡现削弱、B 卡无同款)〔个体化批 V8〕", e1_has and not e2_has)