feat(fx): 迭代20 T1 效果引擎词表扩签+发射点施加面(专长实装批 A段一)

词表:EVENTS 16→18(+dig_stop/battle_won)、FACTS 9→17(8 新事实含 hp_ratio 生命比例前置兑付)、
EFFECT_KINDS +7 新类型(heal/ac_bonus/damage_reduce/bonus_delta/blast_scaled/preview_area/
target_attack_bonus)、OPS +mod_eq;DO_KEYS +4 键(value_event/value_counter/domain/axis)。
rewrite_board 暂留至 T3 删行同批除名(purge_sapper 仍在表),消费分支已摘除。

施加面:battle_orchestrator(dig_reveal 三事实/mine_hit 五新施加/terrain 减伤前置/flag_hit 四新/
round_end GP+AP 队列/battle_won 发射/bonus_delta 战末汇入/ac_bonus 累积器/揭示队列_.flush_pending_reveals)
+damage_controller(attack value_counter rider/敌技 damage_reduce/hp_ratio fact/kill 揭示回调)
+action_economy(dig_paid 返还/dig_stop 发射/上轮耗尽旗标)+minesweeper fx_reveal 效果通道
(只揭真格信息红线)+rng fx_reveal 分签。

T6 承载:EffectEngine adventure 域计数器(domain 键/counters_export/counters_seed)+
AdventureRunner.adventure_counters 共享引用(attune_charges 先例)+断点随档。

测试:effect_words_t1_test 新套(V1:新词在册/出域四路被拒/seed-export 往返/mod_eq 预评估口径)
入 run_all 19 套全绿;冒烟 846/0 持平基线零破坏。
This commit is contained in:
DKChan committed 2026-10-11 22:42:51 +08:00
1 parent 5dbcae227e
commit a57489e970
10 files changed
+506 -69

No files matched your search

+41 -6
View File
@@ -102,16 +102,25 @@ func _fx_dispatch(event: String, payload: Dictionary) -> void:
_fx_hits(event, payload)
# 补充事实面(fact 取值第二优先源——payload 未携带的运行态读数:charge_layers 编排器每轮注入)
# 补充事实面(fact 取值第二优先源——payload 未携带的运行态读数:charge_layers 编排器每轮注入。
# 迭代 20 T1——hp_ratio 补入〔背水 when 面,敌技 damage_taken 载荷不带血比例时回落〕;
# fx_reveal_request=揭示效果回调〔斩首学者 kill 订阅面——编排器注入,入队授予段末兑付〕)
func _fx_fact(fact: String):
match fact:
"charge_layers":
return charge_layers
"dig_streak":
return dig_streak
"hp_ratio":
var hu: Dictionary = units.hero_unit()
return float(int(hu.get("hp", 0))) / float(maxi(1, int(hu.get("max_hp", 1))))
return null
var fx_reveal_request: Callable = Callable() # 揭示效果回调(编排器注入——kill 发射点 reveal_tiles 订阅面)
var fx_ac_request: Callable = Callable() # ac_bonus 回调(编排器注入——石肤 AC 累积单点同步)
# per 取数(per 字段解析——载荷同名字段优先,回落补充事实面;add_ticket_rider/attack_bonus/
# shield/open_ticket 的倍数承载:贡献值 = value × per 读数,cap 对乘积封顶)
func _per_value(name: String, payload: Dictionary) -> int:
@@ -317,14 +326,27 @@ func _resolve_hero_attack(t: Dictionary) -> void:
# modify(mode:clamp_bonus) 订阅命中已并入上方 delta 合计;mode 路由=主角攻击面专享,
# 棋盘克制直伤窗只消费无模式 delta——棋盘不吃毒面与迁移前一致)
var base_value := float(t.base_value)
# 单位标记加伤(迭代 20 T1——处刑台 target_attack_bonus 挂单位字典 fx_atk_bonus 键;
# 阈值沿发射点已写入,本处通用消费——对该敌伤害加算)
base_value += float(int(target.get("fx_atk_bonus", 0)))
# 按序改写族第五拍:矿工重锤增伤面(交换的正向侧)
for h in ac_hits:
if String(h.get("kind", "")) == "modify_ticket" and int(h.get("trade_atk", 0)) > 0:
base_value *= 1.0 + float(int(h.trade_atk)) / 100.0
# 加法族:整备军备「每层下轮首段 +1」(层数×value 加算)——attack_bonus per charge_layers
# 加法族:整备军备「每层下轮首段 +1」(层数×value 加算)——attack_bonus per charge_layers。
# 迭代 20 T1——value_counter 扩展〔疼痛记忆/弃图兑换/陷阱本能——rider 值=计数器账面,
# 值读于施加时点=命中序先行 rider 后清零行〕
for h in ac_hits:
if String(h.get("kind", "")) == "attack_bonus":
base_value += float(int(h.get("value", 0)) * _per_value(String(h.get("per", "")), ac_payload))
var contrib := int(h.get("value", 0)) * _per_value(String(h.get("per", "")), ac_payload)
if h.has("value_counter") and String(h.get("value_counter", "")) != "":
contrib = _fx.counter(String(h.get("value_counter", "")))
base_value += float(contrib)
# 计数器施加(迭代 20 T1——attack_commit 命中行内 counter_add〔用后清零行〕,命中序=声明序)
for h in ac_hits:
if String(h.get("kind", "")) == "counter_add":
var set_v = h.get("set", null)
_fx.counter_add(String(h.get("counter_id", "")), int(h.get("value", 0)) if set_v == null else int(set_v), set_v != null)
# 任意真族:厚积薄发满层 spike 倍乘(≥3 层——强制必中已在折扣拍承载)
if spike_ready:
for h in ac_hits:
@@ -362,6 +384,9 @@ func _resolve_hero_attack(t: Dictionary) -> void:
# 以穿刺类型弹射本体 value%〔无次敌=弹射落空〕。B 模式入队段尾 flush 兑现;A 模式递归 resolve)
if bool(payload.get("killed", false)):
for h in _fx_hits("kill", {"target": String(target.display_name), "overflow": landed}):
if String(h.get("kind", "")) == "reveal_tiles" and fx_reveal_request.is_valid():
fx_reveal_request.call() # 斩首学者——击杀揭示 1 格(编排器入队,授予段末兑付)
continue
if String(h.get("kind", "")) != "overflow":
continue
var next_target = units.default_target()
@@ -399,12 +424,22 @@ func _resolve_enemy_skill(t: Dictionary) -> void:
var total: int = maxi(int(db.settlement.damage_floor), pooled) + int(t.rider) # rider 后置于伤害下限——独立必中加项,不进乘区
# damage_taken 发射+施加(内容数据驱动扩展批 T3——kind=enemy_skill;铁壁整备减伤订阅面:
# shield 加法族合计 value×per(charge_layers),稳健拓荒树规则同面(rebuild 合成订阅);
# 减后过下限保底)
# 减后过下限保底。迭代 20 T1——damage_reduce〔背水 hp_ratio when〕/counter_add〔保险丝/
# 石肤〕/ac_bonus〔石肤〕同面施加;hp_ratio fact 由 _fx_fact 补充事实面回落提供)
var shield := 0
for h in _fx_hits("damage_taken", {"kind": "enemy_skill", "amount": total,
"source": String(t.context.get("skill_id", "")), "round": int(t.round_index)}):
if String(h.get("kind", "")) == "shield":
shield += int(h.get("value", 0)) * _per_value(String(h.get("per", "")), {})
match String(h.get("kind", "")):
"shield":
shield += int(h.get("value", 0)) * _per_value(String(h.get("per", "")), {})
"damage_reduce":
total = maxi(0, total - int(h.get("value", 0)))
"ac_bonus":
if fx_ac_request.is_valid():
fx_ac_request.call(h) # 石肤 AC 累积归编排器单点(set_hero_ac_override 消费面)
"counter_add":
var set_v = h.get("set", null)
_fx.counter_add(String(h.get("counter_id", "")), int(h.get("value", 0)) if set_v == null else int(set_v), set_v != null)
if shield > 0:
total = maxi(int(db.settlement.damage_floor), total - shield)
units.apply_damage(hero, total)