T3标旗流四件+旗伤开单点(迭代12——整合定稿S5):relics.tres填flag四行(雷区图谱common·标中额外格面资源/猎巢人rare·控制巢穴伤害光环/完美布防rare·同轮全中旗伤×2/战旗军规rarest锚点·旗伤2复用board_typed零新配方);旗判定批后统一开单段(战旗军规每hit旗一张+完美布防本轮全中倍率——hit/miss轮末统计);猎巢人=weaken实例数动态rider(八型批side-wide承载——「对其中敌」简化全体先手附加值披露待追认);求值四旗+雷区图谱额外grant;冒烟+1断言表换代8行→689/0+run_all全绿

This commit is contained in:
DKChan committed 2026-10-04 01:43:00 +08:00
1 parent 836e0176fe
commit a85de50336
4 files changed
+93 -4

No files matched your search

+38
View File
@@ -114,6 +114,14 @@ func _relic_flags_for(relic_ids: Array) -> void:
"first_dig_spell":
flags["first_dig_spell"] = true
flags["spell_value"] = int(fx.get("value", 0))
"flag_resource":
flags["flag_resource_extra"] = int(fx.get("value", 0))
"nest_aura":
flags["nest_aura_value"] = int(fx.get("value", 0))
"flag_all_hit":
flags["flag_all_hit_mult"] = int(fx.get("value", 0))
"flag_strike":
flags["flag_strike_value"] = int(fx.get("value", 0))
var mt := int(tiers.get("magic", 0))
if mt >= 1:
flags["rider_flat"] = int(flags.get("rider_flat", 0)) + 1 # 档一质变(≥2 件):rider +1(provisional)
@@ -407,6 +415,30 @@ func _settle() -> void:
_damage.submit(vt)
for evt in _facts_flags:
_judge_flag(evt, ri)
# 战旗军规开单段(迭代 12 T3 标旗流——flag_judged 批后统一开单:轮末每面标中旗对最前存活敌
# 结算 board_typed 必中伤害〔复用零新配方;「旗所在巢穴敌」简化为 default_target 最前存活敌——
# 台账披露待追认〕;完美布防=本轮旗批全中(hit>0 且 miss==0)时旗伤 ×mult——全对推理奖励)。
# 扫雷结算触发点=flag_strike/flag_all_hit/nest_aura 挂点承载红线①。
if int(_damage.relic_flags.get("flag_strike_value", 0)) > 0:
var hits := 0
var misses := 0
for fevt in _facts_flags:
if bool(fevt.get("hit", false)):
hits += 1
else:
misses += 1
if hits > 0:
var mult := int(_damage.relic_flags.get("flag_all_hit_mult", 1))
var strike_value := int(_damage.relic_flags.get("flag_strike_value", 0))
if misses == 0 and mult > 1:
strike_value *= mult # 完美布防:同轮全中旗伤倍增(全对推理奖励)
for fevt in _facts_flags:
if not bool(fevt.get("hit", false)):
continue
var st_t := _damage.open_ticket(DamageController.KIND_BOARD_TYPED, "relic_flag_strike",
"战旗军规", "board", strike_value, DamageController.TARGET_FRONT_ALIVE, ri,
fevt.cell, "normal")
_damage.submit(st_t)
if _facts_path == "cleared":
_grant_clear_reward(ri)
_damage.flush() # 授予段界结账(B 模式——段内开单攒批到此统一兑现;A 模式 no-op;清图批前另有同步结账点)
@@ -627,6 +659,12 @@ func _judge_flag(evt: Dictionary, ri: int) -> void:
var fbt := _damage.open_ticket(DamageController.KIND_BOARD_BLAST, "attune_flag_burst", "标中殉爆", "board",
_attune_mag("flag_burst"), DamageController.TARGET_ALL_ALIVE, ri, cell, "", 0, "highlight", {})
_submit(fbt, false)
# 雷区图谱(迭代 12 T3 标旗流——标中雷额外获得一份格面资源:插旗开始产出对标开格;
# 复用 grant 单点,额外兑付走同一 _grant_routed 正向路由)
if int(_damage.relic_flags.get("flag_resource_extra", 0)) > 0:
var extra_snap = _reward_economy.grant(cell)
if extra_snap is Dictionary:
_grant_routed(extra_snap, "positive", "flag_hit", cell, ri, "", "(雷区图谱)")
var snap = _reward_economy.grant(cell)
if not (snap is Dictionary):
return
+8
View File
@@ -219,6 +219,14 @@ func _resolve_hero_attack(t: Dictionary) -> void:
# 与乘区(奥术余烬「普攻命中后恒定结算」语义);档二(magic 4 件)rider 可暴击=当次 crit 时
# rider 值乘暴击倍率。rider 不改变下限语义(landed 含 rider 后不再过 floor)。
var hero_rider := int(relic_flags.get("rider_flat", 0))
# 猎巢人(迭代 12 T3 标旗流——巢穴控制数转伤害光环):控制数 = 敌方 weaken(削弱)实例数
# 〔八型批 side-wide 状态行——标中旗控制巢穴的既有承载;原设计「对其中敌伤害」简化为全体
# 先手攻击附加值——台账披露待追认〕,每控制 1 巢 rider +Z。
var nest_aura := int(relic_flags.get("nest_aura_value", 0))
if nest_aura > 0:
for eff in effects.query_active("enemy"):
if String(eff.effect_id) == "weaken":
hero_rider += nest_aura
if hero_rider > 0:
if crit and bool(relic_flags.get("rider_crit", false)):
hero_rider = int(round(float(hero_rider) * float(db.settlement.crit_multiplier)))
+36
View File
@@ -42,6 +42,42 @@ rows = [{
"effects": {
"value": 2
}
}, {
"relic_id": "mine_atlas",
"display_name": "雷区图谱",
"rarity": "common",
"archetype": "flag",
"hook": "flag_resource",
"effects": {
"value": 1
}
}, {
"relic_id": "nest_hunter",
"display_name": "猎巢人",
"rarity": "rare",
"archetype": "flag",
"hook": "nest_aura",
"effects": {
"value": 1
}
}, {
"relic_id": "perfect_defense",
"display_name": "完美布防",
"rarity": "rare",
"archetype": "flag",
"hook": "flag_all_hit",
"effects": {
"value": 2
}
}, {
"relic_id": "war_banner",
"display_name": "战旗军规",
"rarity": "rarest",
"archetype": "flag",
"hook": "flag_strike",
"effects": {
"value": 2
}
}]
; 双层 BD 实施批(2026-10-04):机制件表——行 = 流派件定义
+11 -4
View File
@@ -602,8 +602,8 @@ func _smoke_adventure() -> void:
func _smoke_relics() -> void:
print("--- 机制件基建(relic_table · 档位激活引擎 · 机制件带接线)---")
# ① 现行表牌库构成:T2 magic 四件入池——98 数值令牌+4 relic 令牌(投放档 rare×3/rarest×1)
check(_db.relics != null and (_db.relics.rows as Array).size() == 4, "relic_table 已加载(T2 魔法流四件在池——T3-T6 逐流派续填)")
# ① 现行表牌库构成:T2 magic 四件+T3 flag 四件入池——98 数值令牌+8 relic 令牌(投放档 rare×6/rarest×2)
check(_db.relics != null and (_db.relics.rows as Array).size() == 8, "relic_table 已加载(T2 magic 4+T3 flag 4 在池——T4-T6 逐流派续填)")
var a_r0 = load("res://core/adventure_runner.gd").new(_db, _fresh_rng(71))
check(a_r0.start_adventure(71, {"first_script": true}), "机制件带场景:冒险启动(seed 71)")
var relic_tokens := 0
@@ -613,8 +613,8 @@ func _smoke_relics() -> void:
relic_tokens += 1
if String((t as Dictionary).get("tier", "")) == "rarest":
rarest_tokens += 1
check(relic_tokens == 4 and rarest_tokens == 1 and a_r0._bonus_deck.size() == 102,
"机制件带入池:magic 4 件(rare 档 3 + rarest 锚点 1)——牌库 98+4=102")
check(relic_tokens == 8 and rarest_tokens == 2 and a_r0._bonus_deck.size() == 106,
"机制件带入池:8 件(rare 档 6 + rarest 锚点 2)——牌库 98+8=106")
check(_db.relics.validate().is_empty(), "relic_table.validate 零违例(有行流派扫雷端铁律——magic first_dig_spell 在案)")
# ② 档位激活引擎(纯函数直测——构造表 4 件 magic + 1 件 flag + 1 件 rarest 锚点)
var rt := RelicTable.new()
@@ -684,6 +684,13 @@ func _smoke_relics() -> void:
check(int(rf.get("clamp_magic_magic", -1)) == 1 and int(rf.get("clamp_magic_heavy", -1)) == 1
and bool(rf.get("first_dig_spell", false)) and int(rf.get("spell_value", -1)) == 2,
"魔法流求值:魔网织者 magic-vs-magic 罚修正 +1 · 湛蓝誓约 magic-vs-heavy +1 · 魔能共鸣奥术矢 value 2")
# ⑤ T3 标旗流求值面(现行表 magic 4+flag 4——混合持有:flag 档一 4 件成型)
orch._relic_flags_for(["arcane_ember", "mana_weaver", "azure_oath", "mana_resonance",
"mine_atlas", "nest_hunter", "perfect_defense", "war_banner"])
var rf8: Dictionary = orch._damage.relic_flags
check(int(rf8.get("flag_resource_extra", -1)) == 1 and int(rf8.get("nest_aura_value", -1)) == 1
and int(rf8.get("flag_all_hit_mult", -1)) == 2 and int(rf8.get("flag_strike_value", -1)) == 2,
"标旗流求值:雷区图谱额外资源 1 · 猎巢人光环 +1/巢 · 完美布防 ×2 · 战旗军规旗伤 2(复用 board_typed 零新配方)")
var orch0 = load("res://core/battle_orchestrator.gd").new(_db, _fresh_rng(74))
orch0._relic_flags_for([])
check((orch0._damage.relic_flags as Dictionary).is_empty(),