T2魔法流四件+英雄侧rider(迭代12双层BD——整合定稿S1):relics.tres填magic四行(奥术余烬common·rider+1/魔网织者rare·magic-vs-magic克制罚修正/湛蓝誓约rare·magic-vs-heavy+1/魔能共鸣rarest锚点·奥术矢2——「每关首次」落地「每战首次」台账披露待追认);damage_controller扩英雄侧rider(enemy_skill对称位补齐——后置必中附加不进乘区+档二crit乘暴击倍率+行标签「+奥术N(必中)」)+_relic_clamp_bonus克制点直调(hero_attack/board_typed双消费面);battle_orchestrator _relic_flags_for求值注入(rider_flat/clamp双键/first_dig_spell旗+档位质变=档一rider+1档二可暴击〔修tier值误当件数判定〕)+授予段safe分支奥术矢(board_typed magic必中——每战首次计数);注入链=LevelRunner.set_relics共享引用(关内奖励节点兑付当关后续战斗生效——attune_charges同款)+enc.relics;autoplay/冒烟relic兑付relic_id第三参(缺失=拒绝=advance_failed挂死事故修复留痕)+满配窗口放宽(大生命+10数值对——旧+5×3假设过时);冒烟+4断言→688/0+run_all 15全绿

This commit is contained in:
DKChan committed 2026-10-04 01:36:11 +08:00
1 parent c25e8bab3e
commit 836e0176fe
7 files changed
+178 -27

No files matched your search

+33 -3
View File
@@ -60,6 +60,10 @@ var _outcomes := {} # ticket_id → "redeemed"/"zero"/"voided"(
var _seq := 0 # 流水号
var _halted := false # 主角倒下终止旗(死亡事件置位——flush 余单作废)
var _hero_ac_override := -1 # 主角护甲等级合流入参(begin_battle 显式设定——-1 = 表值兜底,口径同战斗编排器)
# 流派件求值旗(迭代 12 T2——begin_battle 编排器经 RelicsEngine 求值后注入;空字典=零扰动。
# rider_flat=英雄侧必中附加值〔奥术余烬族〕/rider_crit=档二 rider 可暴击/first_dig_spell=每战首次
# 开安全格追加魔法矢〔消费在编排器授予段〕/clamp_magic_light·clamp_magic_heavy=克制点直调)
var relic_flags: Dictionary = {}
func _init(db_ref, rng_ref, units_ref, effects_ref) -> void:
@@ -196,7 +200,7 @@ func _resolve_hero_attack(t: Dictionary) -> void:
var threshold: int = defender_ac(target) + int(db.settlement.attack_bonus)
var crit: bool = bool(roll_read.crit)
var discount: int = _roll_discount(int(roll_read.roll), threshold)
var cdelta: int = _counter_delta(atk_type, armor)
var cdelta: int = _counter_delta(atk_type, armor) + _relic_clamp_bonus(atk_type, armor)
# 淬毒刃纹(迭代 11 同调批 T5——底稿 §3:对被克制敌人的穿刺/魔法直伤 +N;条件 = 克制成立 ×
# 攻击类型限定,主角攻击面专属——棋盘克制直伤走 _resolve_board_typed 不吃本加成)
if attune_venom > 0 and (atk_type == "pierce" or atk_type == "magic") and cdelta > 0:
@@ -211,9 +215,21 @@ func _resolve_hero_attack(t: Dictionary) -> void:
payload["crit"] = true
var pooled: int = DamageMath.pool_damage(rolled, clamped_pool("hero_offense"), clamped_pool("enemy_defense"))
var landed: int = maxi(int(db.settlement.damage_floor), pooled)
# 英雄侧 rider(迭代 12 T2 魔法流——enemy_skill rider 对称位补齐):后置必中附加,独立于掷点
# 与乘区(奥术余烬「普攻命中后恒定结算」语义);档二(magic 4 件)rider 可暴击=当次 crit 时
# rider 值乘暴击倍率。rider 不改变下限语义(landed 含 rider 后不再过 floor)。
var hero_rider := int(relic_flags.get("rider_flat", 0))
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)))
landed += hero_rider
payload["hero_rider"] = hero_rider
units.apply_damage(target, landed)
payload["killed"] = not target.alive # 击杀标记在扣血后取(原语义不变)
emit_row_cb.call("damage", String(t.source_class), t.origin_cell, int(t.round_index), _attack_label(String(t.display), crit, discount), landed, payload, String(t.highlight))
var label := _attack_label(String(t.display), crit, discount)
if hero_rider > 0:
label += "+奥术%d(必中)" % hero_rider
emit_row_cb.call("damage", String(t.source_class), t.origin_cell, int(t.round_index), label, landed, payload, String(t.highlight))
_outcomes[int(t.ticket_id)] = "redeemed"
@@ -250,7 +266,7 @@ func _resolve_board_typed(t: Dictionary) -> void:
_ineffective_row(t, "无存活敌人")
_outcomes[int(t.ticket_id)] = "zero"
return
var delta: int = _counter_delta(String(t.attack_type), String(target.get("armor_type", "light")))
var delta: int = _counter_delta(String(t.attack_type), String(target.get("armor_type", "light"))) + _relic_clamp_bonus(String(t.attack_type), String(target.get("armor_type", "light")))
var dealt: int = DamageMath.counter_component(int(t.base_value), delta, int(db.settlement.damage_floor))
units.apply_damage(target, dealt)
emit_row_cb.call("damage", String(t.source_class), t.origin_cell, int(t.round_index), "%s → %s" % [String(t.display), String(target.display_name)], dealt,
@@ -331,6 +347,20 @@ func _counter_delta(attack_type: String, armor: String) -> int:
return int(row.get(armor, 0))
# 克制点直调(迭代 12 T2 魔法流 clamp_modifier 件——克制矩阵查表值后的流派件调整;空旗=0 零扰动):
# 魔网织者=magic vs magic(矩阵罚 −1 → 0/正——「对魔法护甲敌获得克制加成」);湛蓝誓约=magic vs
# heavy(+1 → +2——「对重甲敌所有魔法伤害克制点 +1」)。hero_attack 与 board_typed 两消费面同享。
func _relic_clamp_bonus(attack_type: String, armor: String) -> int:
if attack_type != "magic":
return 0
var bonus := 0
if armor == "magic":
bonus += int(relic_flags.get("clamp_magic_magic", 0))
elif armor == "heavy":
bonus += int(relic_flags.get("clamp_magic_heavy", 0))
return bonus
# 淬毒刃纹 N(迭代 11 同调批 T5——战斗结算 begin_battle 注入;0 = 未装配零扰动)
var attune_venom: int = 0