diff --git a/game/presentation/main.gd b/game/presentation/main.gd index 69430c08..63d93708 100644 --- a/game/presentation/main.gd +++ b/game/presentation/main.gd @@ -467,7 +467,9 @@ func _resume_from_menu() -> void: log_view.clear() logger.start_session(int(bp.get("master_seed", 0))) adventure.set_hero_override(debug_overlay.atk_pct(), debug_overlay.hp_pct()) - if not adventure.resume_adventure(bp, {"hero_override": meta.hero_override() if meta != null else {}, "treasure_unlocked": _treasure_ui.unlocked_set()}): + # 迭代 19 卡⓪①——同调三键随续玩下传(build_adventure_params 统一构造,与开新局同源同口径) + if not adventure.resume_adventure(bp, build_adventure_params(save_manager, meta, + {"treasure_unlocked": _treasure_ui.unlocked_set()})): _fatal_screen("续玩恢复失败——见输出日志") return @@ -491,6 +493,23 @@ func _wire_adventure() -> void: adventure.set_save_manager(save_manager) # 断点承载注入(迭代 8 卡①——停点快照写盘;调试/模拟不经过此路径) +# 冒险开局参数面构造(主菜单开新/续玩两入口共用——迭代 19 卡⓪①:同调三键随开局下传,真实局此前恒空。 +# 取值口径与营地投影完全同源:装配集=save.attunement_equipped(save_manager.gd 访问器)、Y 刷新池= +# meta.attune_refresh_charges(当前等级行表值)、树 rule 键集=meta.tree_rule_keys(Fork 激活侧 effects); +# hero_override 沿用既有 meta 现算口径。static 形态=冒烟直呼单测本函数,免实例化整菜单场景)。 +# 注:runner 侧 resume_adventure 受理面现收 attunement/attune_refresh_y 两键(tree_rules 暂不消费—— +# 传参先行,受理缺口在册披露)。 +static func build_adventure_params(save_manager_ref, meta_ref, extra: Dictionary = {}) -> Dictionary: + var params: Dictionary = { + "hero_override": meta_ref.hero_override() if meta_ref != null else {}, + "attunement": save_manager_ref.attunement_equipped() if save_manager_ref != null else [], + "attune_refresh_y": meta_ref.attune_refresh_charges() if meta_ref != null else 0, + "tree_rules": meta_ref.tree_rule_keys() if meta_ref != null else [], + } + params.merge(extra, true) + return params + + # 冒险模式(三关连探——AdventureRunner 编排;转发信号签名与 runner 一致,接线照原样对接; # 信号连接只在组合根——ADR-0001) func _start_adventure() -> void: @@ -506,8 +525,10 @@ func _start_adventure() -> void: adventure.set_hero_override(debug_overlay.atk_pct(), debug_overlay.hp_pct()) # 永久强化注入(元进度实现批):冒险开始参数面——meta 现算 override 显式传参(全零 = 白板) # 首次冒险脚本(关卡节点图生成 v0.4):存档布尔位 false = 全关固定模板 0(教学重放);置位后逐关抽签 + # 迭代 19 卡⓪①——同调三键随开局下传(build_adventure_params 统一构造,与营地投影同源) var first_script: bool = not save_manager.is_first_adventure_done() - if not adventure.start_adventure(seed_val, {"hero_override": meta.hero_override() if meta != null else {}, "first_script": first_script, "treasure_unlocked": _treasure_ui.unlocked_set(), "shop_mode": "pool"}): + if not adventure.start_adventure(seed_val, build_adventure_params(save_manager, meta, + {"first_script": first_script, "treasure_unlocked": _treasure_ui.unlocked_set(), "shop_mode": "pool"})): _fatal_screen("冒险启动失败——见输出日志") return @@ -516,9 +537,14 @@ func _start_adventure() -> void: # 停点前移批 2026-09-23:本回调返回后才有 choices_presented 到达——入口选路层随即弹出) func _on_adventure_level_started(level_index: int, display_name: String) -> void: runner = adventure.runner() + # 迭代 19 卡⓪②——开场行改传当前生效值(runner.effective_atk/effective_max_hp 与战斗面板同源: + # 表值+永久强化 flat+加算区 flat 后乘调试浮窗 pct,本回调时点 runner 已带全部加成);「含面板加成」 + # 后缀判断同步改认局外加成——永久强化 atk/max_hp flat 或调试浮窗 pct 任一存在才带,白板局不带 + var ov: Dictionary = meta.hero_override() if meta != null else {} log_view.append_bb(Narrator.level_open_line(display_name, int(adventure.master_seed), - int(db.hero.atk), int(db.hero.max_hp), - debug_overlay.atk_pct() > 0 or debug_overlay.hp_pct() > 0)) + runner.effective_atk(), runner.effective_max_hp(), + int(ov.get("atk", 0)) > 0 or int(ov.get("max_hp", 0)) > 0 + or debug_overlay.atk_pct() > 0 or debug_overlay.hp_pct() > 0)) func _reset_run_scope() -> void: