diff --git a/game/core/battle_orchestrator.gd b/game/core/battle_orchestrator.gd index b39b43f3..f5ba6acc 100644 --- a/game/core/battle_orchestrator.gd +++ b/game/core/battle_orchestrator.gd @@ -76,7 +76,8 @@ var _attune_safe_seen := 0 # 掘进蓄能 battle 域安全开格 # 魔矢每战首次计数 battle 域。空集=零扰动) var _relic_first_dig_used := false var _relic_combo := 0 # 矿脉直觉连击计数(battle 域——safe +1/mine 清零) -var _relic_deep_given := 0 # 深挖钻头深层已兑付份数(battle 域——付费配额制:quota=付费次数/cap) +var _relic_deep_given := 0 # 深挖钻头本轮已追加份数(battle 域——v2 本格双份制:safe 事件按付费数上限) +var _relic_paid_at_round_start := 0 # 轮初付费计数快照(v2——本轮付费次数=当前值−快照) var _relic_magma_layers := 0 # 熔火之躯积层(battle 域——受地形伤 +1,轮末反打清零) @@ -252,6 +253,7 @@ func begin_battle(enc: Dictionary) -> bool: _relic_first_dig_used = false _relic_combo = 0 _relic_deep_given = 0 + _relic_paid_at_round_start = 0 _relic_magma_layers = 0 # 树 rule 键消费(迭代 12 T10——Fork 激活侧 effects;真实接线首期两键:先手压制=战斗首轮 # AP+1(queue_ap_delta——先手压制语义)/稳健拓荒=敌方攻击减 1(伤害控制器 flags bulwark); @@ -442,17 +444,18 @@ func _settle() -> void: # 开格流连击/深层产出(迭代 12 T5):矿脉直觉连击 = safe +1(mine 清零在负向分支); # 深挖钻头深层产出 = 每 cap 格额外 grant 一份(收益面补偿额外 AP 成本——R4 甲非信息税对价) _relic_combo += 1 - # 深挖钻头深层产出(2026-10-04 缺陷修复——付费开掘配额制):深层资源只兑付给**付了全价** - # 的挖掘(action_economy.deep_paid_count 每 AP 富余挖格 +1);每 cap 次付费兑一份。 - # AP 不足降级的普通挖格照常开格但不积配额——持有钻头永不锁死挖格(散件保底 B-2)。 - var dd_cap := int(_damage.relic_flags.get("deep_dig_cap", 0)) - if dd_cap > 0: - var quota := int(action_economy.deep_paid_count) / dd_cap - while _relic_deep_given < quota: + # 深挖钻头 v2(2026-10-04 二次修正——用户实测「付 2AP 无可见提升纯挨打」:v1 配额制 + # 4 次付费 8AP 换 1 份随机资源=净负期望+收益埋明细带不可感知):改**本格双份**—— + # 付费挖掘的本格资源直接双份(多花 1AP 买多一份同格产出,账目直白期望微正)。 + # 本轮付费次数 N=deep_paid_count−轮初快照;safe 事件按 N 上限逐格追加第二份(「深挖」)。 + var dd_cost := int(_damage.relic_flags.get("deep_dig_cost", 0)) + if dd_cost > 0: + var paid_this_round := int(action_economy.deep_paid_count) - _relic_paid_at_round_start + if paid_this_round > 0 and _relic_deep_given < paid_this_round: _relic_deep_given += 1 var dd_snap = _reward_economy.grant(evt.cell) if dd_snap is Dictionary: - _grant_routed(dd_snap, "positive", "safe_cell", evt.cell, ri, "", "(深层资源)") + _grant_routed(dd_snap, "positive", "safe_cell", evt.cell, ri, "", "(深挖)") # 魔能共鸣·每战首次开安全格追加魔法矢(迭代 12 T2——relic 件「每关首次开格必出魔法矢」 # 落地为每战首次〔战斗域单事务无跨战状态——「每关」字面改「每战」台账披露待追认〕; # board_typed magic 必中,扫雷结算触发点=relic 挂 first_dig_spell 承载红线①) @@ -563,6 +566,8 @@ func _settle() -> void: return _emit_row("verdict", "", Vector2i(-1, -1), ri, "下一轮次", 0, {}, "") _exit_distribution() + # 深挖钻头 v2 轮初快照滚动(本轮付费次数已消费——下一轮 N=当前值−新快照) + _relic_paid_at_round_start = int(action_economy.deep_paid_count) _settling = false diff --git a/game/presentation/battle_narrator.gd b/game/presentation/battle_narrator.gd index e3179231..f0d917e5 100644 --- a/game/presentation/battle_narrator.gd +++ b/game/presentation/battle_narrator.gd @@ -131,13 +131,42 @@ static func bonus_result_text(result: Dictionary) -> String: return "已选择:%s\n其余选项已丢弃(不可反悔)" % name -# 流派件卡片文案(迭代 12 T1——「流派件 · 流派名」形制+件名;空行 = 防御通用文案) +# 流派件卡片文案(迭代 12 T1;2026-10-04 呈现补强——第三行=hook 效果摘要,用户反馈「不知道件是 +# 干嘛的」缺口承载;摘要=静态映射表 provisional 文案归代拍板白名单「件文案微调」) static func relic_card_text(row: Dictionary) -> String: if row.is_empty() or String(row.get("relic_id", "")) == "": return "流派件\n???" var arch_names := {"magic": "魔法", "pierce": "穿刺", "normal": "普攻", "dig": "开格", "flag": "标旗", "charge": "蓄力", "devour": "吞噬"} var arch := String(arch_names.get(String(row.get("archetype", "")), "流派")) + var summaries := { + "hero_attack_rider": "普攻附加必中伤害", + "clamp_modifier": "克制面强化", + "first_dig_spell": "首格追加奥术矢", + "kill_overflow": "击杀半额弹射", + "dig_count_segments": "开格积穿刺矢", + "roll_discount": "打轻甲更易命中", + "round_dig_bonus": "开格越多打得越疼", + "hit_trade": "加伤换命中", + "armor_roll_rewrite": "攻击恒75%折扣", + "heavy_debuff": "打重甲附加破防", + "dig_yield_mult": "开格产出放大", + "deep_dig": "开格2AP·产出双份", + "flag_resource": "标中雷额外得资源", + "nest_aura": "控巢攻击光环", + "flag_all_hit": "全中标旗伤加倍", + "flag_strike": "标中旗必中打敌", + "ap_carry": "剩AP转下轮攻击", + "charge_shield": "蓄力转减伤", + "charge_spike": "蓄满下轮爆发", + "terrain_refund": "吃地形伤返资源", + "terrain_dig_double": "挖伤害格双产出", + "flag_neutralize": "标旗中和伤害格", + "variant_counter": "吃地形伤反打全体", + } + var summary := String(summaries.get(String(row.get("hook", "")), "")) + if summary != "": + return "%s · %s\n%s" % [String(row.get("display_name", row.get("relic_id", ""))), arch, summary] return "流派件 · %s\n%s" % [arch, String(row.get("display_name", row.get("relic_id", "")))]