diff --git a/scripts/scenes/battle_scene.gd b/scripts/scenes/battle_scene.gd index 36970a9..0b68d40 100644 --- a/scripts/scenes/battle_scene.gd +++ b/scripts/scenes/battle_scene.gd @@ -8016,7 +8016,7 @@ func _hover_info_badge_lines(cell: Vector2i) -> Array[String]: ] var heal := int(summary.get("heal", 0)) if heal > 0: - terrain_line += " · 회복 +%d" % heal + terrain_line += " · 회복 +%d/차례" % heal lines.append(terrain_line) var markers: Array[String] = [] if not objective_label.is_empty() and not objective_used_as_title: @@ -9634,7 +9634,7 @@ func _unit_current_terrain_text(unit: Dictionary) -> String: ] var heal := state.get_terrain_heal(cell) if heal > 0: - text += " 회복 +%d" % heal + text += " 회복 +%d/차례" % heal return text @@ -9790,7 +9790,7 @@ func _format_cell_info_summary_text(cell: Vector2i) -> String: if not event_marker_label.is_empty(): parts.append("표식 %s" % event_marker_label) if heal > 0: - parts.append("회복 +%d" % heal) + parts.append("회복 +%d/차례" % heal) if show_threat_overlay: var threat_names := state.get_threatening_unit_names(cell, BattleState.TEAM_ENEMY) if not threat_names.is_empty(): @@ -9802,9 +9802,7 @@ func _format_cell_info_detail_text(cell: Vector2i) -> String: if not state.is_inside(cell): return "마우스를 전장 칸 위에 올리면 지형과 부대 정보를 볼 수 있습니다." var summary := state.get_cell_summary(cell) - var text := "지형 %d,%d %s\n행군 %d 방비 +%d 회피 +%d%%" % [ - cell.x + 1, - cell.y + 1, + var text := "지형 %s\n행군 %d 방비 +%d 회피 +%d%%" % [ _terrain_display_name(str(summary["terrain"])), summary["move_cost"], summary["defense"], @@ -9812,7 +9810,8 @@ func _format_cell_info_detail_text(cell: Vector2i) -> String: ] var heal := int(summary.get("heal", 0)) if heal > 0: - text += " 회복 +%d" % heal + text += " 회복 +%d/차례" % heal + text += "\n회복지: 차례 시작 때 병력을 %d 회복합니다." % heal var objective_cell_label := state.get_objective_cell_label(cell) if not objective_cell_label.is_empty(): text += "\n목표: %s" % objective_cell_label @@ -11895,7 +11894,7 @@ func _format_briefing_recovery_terrain_text() -> String: parts.append("%s %d칸 +%d" % [name, count, heal]) if parts.is_empty(): return "" - return "회복지 %s" % _join_strings(parts, ", ") + return "회복지(차례 시작) %s" % _join_strings(parts, ", ") func _format_briefing_talk_overview_text() -> String: diff --git a/tools/smoke_visual_assets.gd b/tools/smoke_visual_assets.gd index 9b6ad45..2fd6268 100644 --- a/tools/smoke_visual_assets.gd +++ b/tools/smoke_visual_assets.gd @@ -3434,6 +3434,20 @@ func _check_hud_focus_text(failures: Array[String]) -> void: var forest_text := scene._unit_current_terrain_text(xiahou_dun) if not forest_text.contains("숲") or not forest_text.contains("행군 3"): failures.append("Cavalry movement should use mounted move_type cost on forest: %s" % forest_text) + var village_cell_detail := scene._format_cell_info_detail_text(Vector2i(6, 5)) + if village_cell_detail.contains("7,6"): + failures.append("cell terrain detail should avoid raw coordinates: %s" % village_cell_detail) + if not village_cell_detail.contains("회복 +6/차례") or not village_cell_detail.contains("차례 시작"): + failures.append("cell terrain detail should explain recovery timing: %s" % village_cell_detail) + var village_summary := scene._format_cell_info_summary_text(Vector2i(6, 5)) + if not village_summary.contains("회복 +6/차례"): + failures.append("cell terrain summary should show per-turn recovery: %s" % village_summary) + var village_badge_lines := scene._join_strings(scene._hover_info_badge_lines(Vector2i(6, 5)), "\n") + if not village_badge_lines.contains("회복 +6/차례"): + failures.append("hover badge should show per-turn recovery: %s" % village_badge_lines) + var recovery_overview := scene._format_briefing_recovery_terrain_text() + if not recovery_overview.contains("차례 시작"): + failures.append("briefing recovery overview should mention recovery timing: %s" % recovery_overview) var archer: Dictionary = scene.state.get_unit("yellow_turban_3") var archer_text := scene._format_unit_focus_text(archer, "Hover") if not archer_text.contains("원거리 견제"): @@ -4889,8 +4903,12 @@ func _check_terrain_and_unit_presentation(failures: Array[String]) -> void: failures.append("castle objective cell info should expose capture label and healing: %s" % scene.cell_info_label.text) if scene.cell_info_label != null and (scene.cell_info_label.text.contains("행") or scene.cell_info_label.text.contains("방+")): failures.append("visible cell info should leave terrain numbers to the tooltip: %s" % scene.cell_info_label.text) - if scene.cell_info_label != null and not scene.cell_info_label.tooltip_text.contains("21,2"): - failures.append("castle objective cell info should keep coordinates in the hover tooltip: %s" % scene.cell_info_label.tooltip_text) + if scene.cell_info_label != null and not scene.cell_info_label.tooltip_text.contains("목표: 성채 장악"): + failures.append("castle objective cell info tooltip should explain the capture objective: %s" % scene.cell_info_label.tooltip_text) + if scene.cell_info_label != null and (not scene.cell_info_label.tooltip_text.contains("회복 +8/차례") or not scene.cell_info_label.tooltip_text.contains("차례 시작")): + failures.append("castle objective cell info tooltip should explain per-turn recovery timing: %s" % scene.cell_info_label.tooltip_text) + if scene.cell_info_label != null and scene.cell_info_label.tooltip_text.contains("21,2"): + failures.append("castle objective cell info tooltip should avoid raw coordinates: %s" % scene.cell_info_label.tooltip_text) if scene.cell_info_panel == null or not scene.cell_info_panel.visible: failures.append("cell info panel should be visible for a hovered battlefield cell") if scene.cell_info_icon == null or str(scene.cell_info_icon.get_meta("icon_kind", "")) != "objective":