test(迁移): 批 B 波 1 G4 套5 fresh 池攻击链三条迁入 roll_multiplier_test.gd——剪切挂载绿(宿主 37 检查)+变异 3/3 验红(受理守卫恒拒/敌技行改名/乘区池注值);首轮剪切边界差一行致游离 check 残留 Parse Error,闸01 抓到补删(发现⑦同源教训记账);smoke_all.gd 同批删函数节头与调用行;闸01 剩余面 981 绿

This commit is contained in:
DKChan committed 2026-10-23 03:21:54 +08:00
1 parent 855bce4534
commit f674132c04
3 files changed
+35 -32

No files matched your search

@@ -33,6 +33,7 @@ func _init() -> void:
_smoke_armor_roll()
_smoke_pool_wiring()
_smoke_damage_types()
_smoke_attack_chain_fresh_pool()
quit(Kit.finish("roll_multiplier_test"))
@@ -424,3 +425,36 @@ func _find_seal_target(minesweeper, want_mine: bool) -> Dictionary:
if revealed_set.has(n) and (minesweeper.compute_move_path(n).size() > 0 or n == minesweeper.hero_pos()):
return {"seal_cell": c, "hero_cell": n}
return {}
# ---- 战斗段 fresh 池攻击链回归(playtest-2026-09-12 报告 Bug#2 沉淀——
# 「Boss 攻击拍零兑现」= 叠满触底 ×0;本断言钉死:
# 池为空时攻击链必须按掷点档位足额兑现,口径:
# d_tick = max(damage_floor, pool_damage(floor(基线×档位%), 0, 0)),档位读数随行重建可归因)----
func _smoke_attack_chain_fresh_pool() -> void:
print("--- 战斗结算·fresh 池攻击链回归(Bug#2·掷点口径)---")
var rng = load("res://core/rng_service.gd").new()
rng.set_master_seed(20260913)
var settlement = load("res://core/battle_orchestrator.gd").new(_db, rng)
var ticks: Array = [] # {baseline, attach, roll, tier, crit, tick}——敌行动伤害行重建
settlement.step_row.connect(func(row):
if row.type == "damage" and row.source_class == "enemy_action":
ticks.append({"baseline": int(row.baseline), "attach": int(row.get("attach", 0)), "roll": int(row.roll),
"tier": int(row.tier), "crit": bool(row.get("crit", false)), "tick": int(row.value)}))
Kit.check("fresh 池回归战斗启动(Boss 行)",
settlement.begin_battle({"level_index": 1, "node_depth": 4, "hero_hp": int(_db.hero.max_hp), "node_type": "boss"}))
# 停手轮:零挖掘零封印 → 零授予 → 池恒空;Boss 拍 = 开轮摇号结果(伤害技/普攻兑付伤害行、硬化施放行不计)
for i in range(6):
if settlement.battle_result != "":
break
settlement.minesweeper.settle_batch([{"action": "stop"}])
Kit.check("非施放攻击拍采样充足(%d 拍——增益施放行零兑付为设计语义不计)" % ticks.size(), ticks.size() >= 2)
var all_full := true
for t in ticks:
var base_factor: float = float(t.tier) * (float(_db.settlement.crit_multiplier) / 100.0 if t.crit else 1.0)
var rolled_base := int(floor(float(t.baseline) * base_factor / 100.0))
var expected: int = maxi(int(_db.settlement.damage_floor), rolled_base + int(t.get("attach", 0)))
if int(t.tick) != expected or int(t.tick) <= 0:
all_full = false
Kit.check("fresh 池非蓄力拍 d_tick = max(1, 掷点档位基线)(Boss 攻击链健康——Bug#2 回归断言)", all_full)