diff --git a/game/core/battle_orchestrator.gd b/game/core/battle_orchestrator.gd index d31065bc..464ef271 100644 --- a/game/core/battle_orchestrator.gd +++ b/game/core/battle_orchestrator.gd @@ -795,7 +795,8 @@ func _battle_over(result: String) -> void: _enemy_system.despawn_all() _status_effects.notify_battle_end() if aux_inventory != null: - aux_inventory.retire_overlays() # 迭代 7 T3——叠加层随战斗结束清空(库存不动——关卡域跨战斗) action_economy.notify_combat_end() # → Idle,RAP 清零 + aux_inventory.retire_overlays() # 迭代 7 T3——叠加层随战斗结束清空(库存不动——关卡域跨战斗) + action_economy.notify_combat_end() # → Idle,RAP 清零(2026-10-02 修复批:原被 tab 事故并进上一行行尾注释从不执行——每战新建实例掩盖了症状;P0-3) db.set_reload_gate(false) _reset_round_facts() battle_finished.emit({"result": result, "hero_hp": hero_hp_left, "gp_dropped": gp_dropped}) diff --git a/game/presentation/views/board_view.gd b/game/presentation/views/board_view.gd index ec513c9f..18fc7b89 100644 --- a/game/presentation/views/board_view.gd +++ b/game/presentation/views/board_view.gd @@ -743,7 +743,9 @@ func _paint_cell(c: Vector2i, hero: Vector2i) -> void: u.proj_band = 0.0 u.tex_facade = null u.facade_strip = false - u.tex_flag = null + # 旗槽不在此重置(2026-10-02 修复批——T13 批的 paint 尾部 `u.tex_flag = null` 与 L683 的条件 + # 赋值构成双写踩踏:执行序 683→此处把旗纹理恒清 null=素材在位时插旗不可见;L683 的 else 分支 + # 已是全路径清残留,尾部重置系冗余且有害,删除) var south_n: Vector2i = c + Vector2i(0, 1) var north_n: Vector2i = c + Vector2i(0, -1) var south_in: bool = south_n.x >= 0 and south_n.y >= 0 and south_n.x < _board.width and south_n.y < _board.height diff --git a/game/smoke/smoke_all.gd b/game/smoke/smoke_all.gd index 52fc2a40..a45b5e7e 100644 --- a/game/smoke/smoke_all.gd +++ b/game/smoke/smoke_all.gd @@ -1273,6 +1273,11 @@ func _run_battle(L: int, D: int) -> Dictionary: if out.result == "": out.result = "timeout" out.terminated = out.result == "victory" or out.result == "defeat" + if out.terminated: + # P0-3 回归断言(2026-10-02 修复批):notify_combat_end 曾被并进行尾注释从不执行—— + # 战斗收束后相位必须回 Idle(RAP 清零),任何「相位卡 Waiting」回归在此被抓 + check(action_economy.phase == "Idle", + "战斗收束后行动经济相位回 Idle(notify_combat_end 生效,实测=%s)" % String(action_economy.phase)) return out diff --git a/game/smoke/ui_input_probe.gd b/game/smoke/ui_input_probe.gd index c766672a..e7615c2a 100644 --- a/game/smoke/ui_input_probe.gd +++ b/game/smoke/ui_input_probe.gd @@ -208,6 +208,15 @@ func _ready() -> void: await get_tree().process_frame if not ms.has_flag(flag_t): _problems.append("case④ 核心旗态未落位") + # ---- case④b 旗纹理槽回归断言(P0-1 修复批 2026-10-02):T13 批曾在 paint 尾部无条件 + # `u.tex_flag = null` 覆盖 T17 批的条件赋值=素材在位时插旗不可见(headless 缺盘走字形回退 + # 掩盖)——有盘断言纹理在槽、缺盘断言字形回退,两分支防双写踩踏复活 ---- + var flag_unit = bv._cells.get(flag_t) + if bv._flag_tex != null: + if flag_unit == null or flag_unit.tex_flag != bv._flag_tex: + _problems.append("case④b 旗纹理槽未挂封印旗纹理(tex_flag=%s)" % ["无单元" if flag_unit == null else str(flag_unit.tex_flag)]) + elif flag_unit == null or flag_unit.glyph != "旗": + _problems.append("case④b 缺盘字形回退缺失(glyph=%s)" % ["无单元" if flag_unit == null else String(flag_unit.glyph)]) # ---- case⑤ 双击 chord:禁入格双左击(核心拒挖零副作用)→ chord_attempted ---- _push_click(_pos(bv, forbid_t), MOUSE_BUTTON_LEFT) _push_click(_pos(bv, forbid_t), MOUSE_BUTTON_LEFT) @@ -318,7 +327,7 @@ func _ready() -> void: else: _problems.append("case⑭ 无未开格可验(板面异常)") if _problems.is_empty(): - print("[ui_input_probe] PASS — 悬停金框/禁入信号/路径预览/flag_place/chord/dig/英雄落位/影子构成/朝向/缩格重排/缺位回退/变异角标 十四断言全绿(真实 push_input 路径——⑫图上命中⑬画布拟合 2026-09-28 增,⑭变异角标 2026-09-29 增)") + print("[ui_input_probe] PASS — 悬停金框/禁入信号/路径预览/flag_place/chord/dig/英雄落位/影子构成/朝向/缩格重排/缺位回退/变异角标 十五断言全绿(真实 push_input 路径——⑫图上命中⑬画布拟合 2026-09-28 增,⑭变异角标 2026-09-29 增,④b 旗纹理槽回归 2026-10-02 增)") get_tree().quit(0) else: for p in _problems: