From 345ed20e4a48eaeb394de7eae616b3d28f5de093 Mon Sep 17 00:00:00 2001 From: Wickedness Date: Sat, 20 Jun 2026 06:58:25 +0900 Subject: [PATCH] Clarify recovery terrain markers --- scripts/scenes/battle_scene.gd | 45 +++++++++++++++++++++++++++++----- tools/smoke_visual_assets.gd | 8 ++++++ 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/scripts/scenes/battle_scene.gd b/scripts/scenes/battle_scene.gd index a90cc42..226090d 100644 --- a/scripts/scenes/battle_scene.gd +++ b/scripts/scenes/battle_scene.gd @@ -99,6 +99,8 @@ const BATTLE_PRESENTATION_STEP_GAP := 0.08 const BATTLE_PRESENTATION_FEEDBACK_LAG := 0.10 const UNIT_MOVE_ANIMATION_DURATION := 0.18 const UNIT_IDLE_PHASE_SPEED := 2.4 +const RECOVERY_TERRAIN_MARKER_SIZE := Vector2(30, 30) +const RECOVERY_TERRAIN_AMOUNT_BADGE_SIZE := Vector2(24, 12) const TARGET_PREVIEW_BADGE_SIZE := Vector2(122, 24) const TARGET_PREVIEW_BADGE_ICON_SIZE := Vector2(18, 18) const HOVER_INFO_BADGE_ICON_SIZE := Vector2(19, 19) @@ -4986,16 +4988,39 @@ func _draw_recovery_terrain_markers(bounds: Rect2i) -> void: if marker_text.is_empty(): continue var cell_rect := _rect_for_cell(cell) - _draw_tile_marker("recover", cell_rect, Color(1.0, 1.0, 1.0, 0.34), 2.0) + _draw_tile_marker("recover", cell_rect, _recovery_tile_marker_modulate(cell), 1.0) var marker_rect := _recovery_marker_rect(cell) - draw_rect(marker_rect, Color(0.035, 0.022, 0.012, 0.74)) - draw_rect(marker_rect, Color(UI_OLD_BRONZE.r, UI_OLD_BRONZE.g, UI_OLD_BRONZE.b, 0.88), false, 1.4) - if not _draw_map_badge("recover", marker_rect.grow(3.0), Color(1.0, 1.0, 1.0, 0.96)): + draw_rect(marker_rect.grow(1.0), Color(0.018, 0.014, 0.010, 0.78)) + draw_rect(marker_rect.grow(1.0), Color(UI_OLD_BRONZE.r, UI_OLD_BRONZE.g, UI_OLD_BRONZE.b, 0.94), false, 1.6) + if _draw_map_badge("recover", marker_rect.grow(2.0), Color(1.0, 1.0, 1.0, 0.98)): + _draw_recovery_marker_amount(font, marker_rect, marker_text) + else: var plus_center := marker_rect.position + Vector2(8.0, marker_rect.size.y * 0.5) var plus_color := Color(0.54, 0.86, 0.48, 0.92) draw_line(plus_center + Vector2(-3.0, 0.0), plus_center + Vector2(3.0, 0.0), plus_color, 1.6) draw_line(plus_center + Vector2(0.0, -3.0), plus_center + Vector2(0.0, 3.0), plus_color, 1.6) - _draw_ink_text(font, marker_rect.position + Vector2(9.0, 13.0), marker_text, HORIZONTAL_ALIGNMENT_CENTER, marker_rect.size.x - 9.0, 11, Color(0.78, 0.98, 0.62, 0.96)) + _draw_recovery_marker_amount(font, marker_rect, marker_text) + + +func _draw_recovery_marker_amount(font: Font, marker_rect: Rect2, marker_text: String) -> void: + var text_rect := _recovery_marker_amount_rect(marker_rect) + draw_rect(text_rect, Color(0.030, 0.018, 0.010, 0.82)) + draw_rect(text_rect, Color(0.58, 0.82, 0.42, 0.78), false, 1.0) + _draw_ink_text( + font, + text_rect.position + Vector2(0.0, text_rect.size.y - 2.0), + marker_text, + HORIZONTAL_ALIGNMENT_CENTER, + text_rect.size.x, + 10, + Color(0.82, 1.0, 0.62, 0.98) + ) + + +func _recovery_tile_marker_modulate(cell: Vector2i) -> Color: + var heal := maxi(0, state.get_terrain_heal(cell)) + var alpha := 0.42 + minf(float(heal) * 0.012, 0.12) + return Color(1.0, 1.0, 1.0, alpha) func _recovery_marker_text(cell: Vector2i) -> String: @@ -5007,10 +5032,18 @@ func _recovery_marker_text(cell: Vector2i) -> String: func _recovery_marker_rect(cell: Vector2i) -> Rect2: var cell_rect := _rect_for_cell(cell) - var size := Vector2(24.0, 24.0) + var size := RECOVERY_TERRAIN_MARKER_SIZE return Rect2(cell_rect.position + Vector2(TILE_SIZE - size.x - 4.0, 4.0), size) +func _recovery_marker_amount_rect(marker_rect: Rect2) -> Rect2: + var size := RECOVERY_TERRAIN_AMOUNT_BADGE_SIZE + return Rect2( + marker_rect.position + Vector2((marker_rect.size.x - size.x) * 0.5, marker_rect.size.y - size.y - 1.0), + size + ) + + func _draw_silk_map_frame(board_rect: Rect2) -> void: var padding := MAP_SCROLL_FRAME_PADDING var top_rod := Rect2(board_rect.position + Vector2(-padding, -padding), Vector2(board_rect.size.x + padding * 2.0, 7.0)) diff --git a/tools/smoke_visual_assets.gd b/tools/smoke_visual_assets.gd index d2f410d..a14b540 100644 --- a/tools/smoke_visual_assets.gd +++ b/tools/smoke_visual_assets.gd @@ -3335,6 +3335,14 @@ func _check_hud_focus_text(failures: Array[String]) -> void: var marker_rect: Rect2 = scene._recovery_marker_rect(Vector2i(6, 5)) if not scene._rect_for_cell(Vector2i(6, 5)).encloses(marker_rect): failures.append("Recovery terrain marker should stay inside its tile: %s" % str(marker_rect)) + if marker_rect.size.x < BattleSceneScript.RECOVERY_TERRAIN_MARKER_SIZE.x or marker_rect.size.y < BattleSceneScript.RECOVERY_TERRAIN_MARKER_SIZE.y: + failures.append("Recovery terrain marker should reserve readable generated badge space: %s" % str(marker_rect.size)) + var recovery_amount_rect: Rect2 = scene._recovery_marker_amount_rect(marker_rect) + if not marker_rect.encloses(recovery_amount_rect): + failures.append("Recovery terrain amount badge should sit inside generated marker: %s in %s" % [str(recovery_amount_rect), str(marker_rect)]) + var recovery_tile_modulate: Color = scene._recovery_tile_marker_modulate(Vector2i(6, 5)) + if recovery_tile_modulate.a < 0.45: + failures.append("Recovery terrain tile marker should be visible over high-res map art: %.3f" % recovery_tile_modulate.a) var facing_tile_rect: Rect2 = scene._rect_for_cell(Vector2i(1, 6)) var facing_marker_points: PackedVector2Array = scene._unit_facing_marker_points(facing_tile_rect, cao_cao) var facing_points_inside := facing_marker_points.size() == 3