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:
1 parent
5dbcae227e
commit
a57489e970
10 files changed
+506
-69
No files matched your search
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user