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:
1 parent
836e0176fe
commit
a85de50336
4 files changed
+93
-4
No files matched your search
@@ -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
|
||||
|
||||
@@ -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)))
|
||||
|
||||
@@ -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
@@ -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(),
|
||||
|
||||
Reference in new issue
Block a user