merge: 主角增益只续时不叠层批落籍(台账 102,让号注记)

冲突解式:与伏击退役/格面资源八型批(3468066)双向共存——
- status_effects.tres:attack_up/ac_up refresh(本批)+ ambush 删行/alert 进(八型批)
- 增益状态 v0.11(八型,原分支报 v0.8 旧基线编号顺延)/v0.12(本批续时)
- registry:alert 行 + attack_up/ac_up refresh 两行并存
- active.md 台账 101(伏击/八型)+102(本批,让号)
- 合并后冒烟 355 项 0 失败三闸全过
This commit is contained in:
DKChan committed 2026-09-20 04:16:58 +08:00
commit 867e12da3b
13 files changed
+1148 -37

No files matched your search

@@ -11,7 +11,7 @@ rows = [{
"magnitude": 50,
"unit": "percent",
"duration_settlements": 1,
"stack_policy": "stack",
"stack_policy": "refresh",
"max_stack": 2
}, {
"effect_id": "ac_up",
@@ -20,7 +20,7 @@ rows = [{
"magnitude": 1,
"unit": "ac",
"duration_settlements": 1,
"stack_policy": "stack",
"stack_policy": "refresh",
"max_stack": 2
}, {
"effect_id": "weaken",
@@ -125,3 +125,8 @@ rows = [{
; ② ambush(伏击)行整体退役——群伤负向不再放大敌方伤害;③ 新增 alert(警觉:敌方护甲等级 +1,
; target_side enemy、unit ac、1 结算、stack 上限 16)——blast 型负向新载体,消费 = _defender_ac 敌方侧
; ac 型读法(本批新接线)。状态表九行→九行(伏击出、警觉进)。数值全部 provisional 归 难度曲线与Boss。
;
; 主角增益只续时不叠层批(2026-09-20 用户拍板「主角的其实也一样,都是按照叙事的方式,不要有叠层;只续时不叠层」——
; 对齐削弱 2026-09-18 续时定案):attack_up / ac_up 两行 stack_policy stack→refresh;
; duration_settlements=1 与 max_stack=2 表值不动(refresh 下层数恒 1、max_stack 不消费——weaken 先例;
; dur=1 下续时表现为重复拿重置当轮倒数,跨轮延续随将来 duration 拉长自然显形——数值归状态层重设计批)。
@@ -229,7 +229,7 @@ func _smoke_level() -> void:
# ---- 护甲等级掷点批·换装护栏(2026-09-16 用户拍板:百分比减伤行整体退役换装 AC,无双轨)----
# ① 换装在位:defense_up 状态行/池映射/奖励行三处全无残留,ac_up 三处就位(unit=ac ×2 层);
# ① 换装在位:defense_up 状态行/池映射/奖励行三处全无残留,ac_up 三处就位(unit=ac,2026-09-20 改只续时不叠层);
# ② 免伤墙归零护栏泛化保留(BUG-0003 事故类永久免疫):hero_defense 池任何 percent 行
# magnitude × max_stack > pool_clamp_lo——单效果叠满不可触池底(off_guard 已于 2026-09-18
# 结构修复批退离 hero_defense 池换装 AC 轴,池内现无 percent 行——本断言防未来负向行回归时静默造墙);
@@ -243,8 +243,8 @@ func _smoke_ac_swap_guard() -> void:
var ac_row: Dictionary = _db.status_effect_row("ac_up")
check(not ac_row.is_empty() and String(ac_row.get("target_side", "")) == "hero" \
and String(ac_row.get("unit", "")) == "ac" and int(ac_row.get("magnitude", 0)) == 1 \
and int(ac_row.get("max_stack", 0)) == 2 and String(ac_row.get("stack_policy", "")) == "stack",
"ac_up 行在位(hero · +1 ac · ×2 层 · stack——AC 阈值轴新量纲)")
and String(ac_row.get("stack_policy", "")) == "refresh",
"ac_up 行在位(hero · +1 ac · 只续时不叠层——2026-09-20 主角增益续时批)")
var ac_reward := {}
for row in _db.reward.rows:
if String(row.get("cell_type", "")) == "defense" and String(row.get("polarity", "")) == "positive":
@@ -327,16 +327,17 @@ func _smoke_armor_roll() -> void:
"削弱重复授予 → 层数保持 1、剩余结算数重置 2(续时语义——结构性消饱和)")
check(int(weaken_probe.get("pool", -999)) == int(_db.status_effect_row("weaken").magnitude),
"削弱单层池读数 = 行值(enemy_output 池单层贡献——×2 叠满触底 ×0 不可达,免伤轮根治)")
# ④ AC12 折扣档分布(行为面):ac_up ×2 逐轮授给(时效 1)→ Boss 行攻击拍逐拍判定
var tiers := _ac12_tier_samples()
# ④ AC11 折扣档分布(行为面):ac_up 逐轮授给(时效 1)→ Boss 行攻击拍逐拍判定
# (2026-09-20 主角增益续时批后 ac_up 层数恒 1——局内可达 AC 上限 10+1=11,探针随行下调)
var tiers := _ac11_tier_samples()
var tier_distinct := {}
var tiers_valid := true
for t in tiers:
tier_distinct[int(t)] = true
if not [100, 75, 50, 25].has(int(t)):
tiers_valid = false
check(tiers_valid and tiers.size() >= 3, "AC12 攻击拍逐拍判定(×%d 拍全部落档域 {100,75,50,25})" % tiers.size())
check(tier_distinct.size() >= 2, "折扣档实际流动(AC12 实测档位 %s——≥2 档可见)" % str(tier_distinct.keys()))
check(tiers_valid and tiers.size() >= 3, "AC11 攻击拍逐拍判定(×%d 拍全部落档域 {100,75,50,25})" % tiers.size())
check(tier_distinct.size() >= 2, "折扣档实际流动(AC11 实测档位 %s——≥2 档可见)" % str(tier_distinct.keys()))
# ⑤ 棋盘来源必中 + 吃掷点行留档(全战斗流扫描)
var run = _run_battle(1, 0)
var board_ok := true
@@ -399,9 +400,10 @@ func _weaken_refresh_probe() -> Dictionary:
return {}
# AC12 折扣档采样:每停手轮前直授 ac_up ×2(时效 1 逐轮衰减)——敌拍逐拍判定留档。
# 敌人技能池批:拍序改为摇号制,原 AC 批定影种子不再保证档位多样性——扫描种子取首个 ≥2 档样本集。
func _ac12_tier_samples() -> Array:
# AC11 折扣档采样:每停手轮前直授 ac_up ×1(时效 1 逐轮衰减)——敌拍逐拍判定留档。
# (2026-09-20 主角增益续时批:ac_up 只续时不叠层、层数恒 1——原 ×2 授给达 AC12 的采样随批降为 AC11;
# 敌人技能池批:拍序改为摇号制,原 AC 批定影种子不再保证档位多样性——扫描种子取首个 ≥2 档样本集。)
func _ac11_tier_samples() -> Array:
for seed_offset in range(20):
var rng = load("res://core/rng_service.gd").new()
rng.set_master_seed(20260917 + seed_offset)
@@ -413,8 +415,7 @@ func _ac12_tier_samples() -> Array:
var guard := 12
while settlement.battle_result == "" and guard > 0:
guard -= 1
for i in range(2):
settlement._status_effects.apply_effect("ac_up", {"source_class": "safe_cell", "origin_cell": Vector2i(0, 0), "round_index": settlement.round_index})
settlement._status_effects.apply_effect("ac_up", {"source_class": "safe_cell", "origin_cell": Vector2i(0, 0), "round_index": settlement.round_index})
settlement.minesweeper.settle_batch([{"action": "stop"}])
var tiers: Array = []
for row in rows: