From db0d7a3334c5b6247351deae133182684cac63f1 Mon Sep 17 00:00:00 2001 From: Wickedness Date: Sat, 20 Jun 2026 02:03:55 +0900 Subject: [PATCH] Tone down yellow UI styling --- README.md | 1 + scripts/scenes/battle_scene.gd | 205 ++++++++++++++++++--------------- tools/smoke_visual_assets.gd | 43 +++---- 3 files changed, 136 insertions(+), 113 deletions(-) diff --git a/README.md b/README.md index f5a0a59..85db248 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ Godot 4 tactical RPG prototype inspired by classic turn-based Romance of the Thr - Pre-battle Formation lets deployed officers swap starting positions inside scenario-defined cells, with portrait rows, coordinate badges, and hover placement instructions. - Pre-battle briefing shows the campaign chapter, chapter battle number, location, victory/defeat summary, and first-clear reward preview. - Pre-battle prep commands use compact icon buttons with active selection state and Korean hover labels for chapters, shop, talks, armory, roster, formation, and save records. +- Core UI panels now use a calmer ink/wood/jade palette with restrained rounded corners instead of the earlier yellow, hard-edged frame treatment. - Pre-battle Chapters overview shows story-arc progress with map thumbnail rows, compact status badges, hover details, and can open completed or current battles. - Pre-battle Save menu can write and load one manual campaign checkpoint separate from the automatic save, using compact seal-style slot rows and hover checkpoint details. - The title screen exposes Start, Load, and Settings, and Load now lets the player choose between the automatic record and the manual checkpoint. diff --git a/scripts/scenes/battle_scene.gd b/scripts/scenes/battle_scene.gd index b4a3f1c..6063233 100644 --- a/scripts/scenes/battle_scene.gd +++ b/scripts/scenes/battle_scene.gd @@ -12,16 +12,16 @@ const DEFAULT_BATTLE_BACKGROUND_PATH := "res://art/backgrounds/battlefield_front const PLAYER_COLOR := Color(0.17, 0.38, 0.29) const ENEMY_COLOR := Color(0.64, 0.085, 0.045) const GRID_COLOR := Color(0.12, 0.070, 0.032, 0.36) -const MOVE_OVERLAY_COLOR := Color(0.72, 0.54, 0.24, 0.26) -const MOVE_BORDER_COLOR := Color(0.94, 0.73, 0.36, 0.48) +const MOVE_OVERLAY_COLOR := Color(0.20, 0.42, 0.34, 0.24) +const MOVE_BORDER_COLOR := Color(0.43, 0.72, 0.58, 0.46) const ATTACK_OVERLAY_COLOR := Color(0.72, 0.055, 0.032, 0.24) const ATTACK_BORDER_COLOR := Color(0.92, 0.34, 0.18, 0.50) const SKILL_OVERLAY_COLOR := Color(0.10, 0.25, 0.20, 0.28) const SKILL_AREA_OVERLAY_COLOR := Color(0.26, 0.34, 0.23, 0.30) const ITEM_OVERLAY_COLOR := Color(0.24, 0.42, 0.25, 0.28) const ITEM_BORDER_COLOR := Color(0.58, 0.74, 0.42, 0.44) -const FORMATION_OVERLAY_COLOR := Color(0.78, 0.54, 0.18, 0.32) -const OBJECTIVE_OVERLAY_COLOR := Color(0.88, 0.52, 0.14, 0.30) +const FORMATION_OVERLAY_COLOR := Color(0.18, 0.38, 0.34, 0.30) +const OBJECTIVE_OVERLAY_COLOR := Color(0.58, 0.18, 0.12, 0.28) const THREAT_OVERLAY_COLOR := Color(0.76, 0.060, 0.035, 0.20) const THREAT_BORDER_COLOR := Color(0.86, 0.18, 0.10, 0.48) const BGM_MENU_PATH := "res://audio/bgm/menu_theme_placeholder.wav" @@ -160,36 +160,36 @@ const TARGETING_HINT_TITLE_SIZE := Vector2(220, 22) const TARGETING_HINT_DETAIL_SIZE := Vector2(220, 28) const LOCAL_COMMAND_PANEL_GAP := 8.0 const LOCAL_COMMAND_PANEL_BOARD_PADDING := 4.0 -const UI_RICE_PAPER := Color(0.58, 0.45, 0.25, 0.98) -const UI_RICE_PAPER_LIGHT := Color(0.71, 0.56, 0.31, 0.99) -const UI_RICE_PAPER_DARK := Color(0.29, 0.17, 0.075, 0.98) -const UI_AGED_INK := Color(0.09, 0.055, 0.032, 1.0) -const UI_DARK_LACQUER := Color(0.085, 0.025, 0.012, 0.988) -const UI_LACQUER_EDGE := Color(0.035, 0.014, 0.008, 1.0) +const UI_RICE_PAPER := Color(0.48, 0.46, 0.39, 0.98) +const UI_RICE_PAPER_LIGHT := Color(0.62, 0.59, 0.50, 0.99) +const UI_RICE_PAPER_DARK := Color(0.18, 0.17, 0.14, 0.98) +const UI_AGED_INK := Color(0.055, 0.060, 0.055, 1.0) +const UI_DARK_LACQUER := Color(0.045, 0.038, 0.034, 0.988) +const UI_LACQUER_EDGE := Color(0.025, 0.023, 0.020, 1.0) const UI_CINNABAR := Color(0.52, 0.045, 0.025, 1.0) const UI_CINNABAR_DARK := Color(0.32, 0.025, 0.016, 1.0) -const UI_OLD_BRONZE := Color(0.78, 0.58, 0.27, 1.0) -const UI_TARNISHED_BRONZE := Color(0.50, 0.36, 0.16, 1.0) -const UI_BAMBOO := Color(0.43, 0.27, 0.10, 1.0) -const UI_BAMBOO_DARK := Color(0.20, 0.11, 0.045, 1.0) -const UI_MUTED_JADE := Color(0.16, 0.30, 0.23, 1.0) -const UI_PARCHMENT_TEXT := Color(0.95, 0.82, 0.55, 1.0) -const UI_DISABLED_TEXT := Color(0.48, 0.40, 0.29, 1.0) -const UI_SILK_WASH := Color(0.80, 0.64, 0.37, 1.0) -const UI_SILK_FIBER := Color(0.18, 0.10, 0.045, 1.0) -const UI_SOOT_EDGE := Color(0.035, 0.018, 0.012, 1.0) -const UI_BONE_PAPER := Color(0.66, 0.52, 0.31, 0.995) -const UI_INK_WASH := Color(0.10, 0.065, 0.040, 1.0) +const UI_OLD_BRONZE := Color(0.50, 0.46, 0.36, 1.0) +const UI_TARNISHED_BRONZE := Color(0.34, 0.31, 0.24, 1.0) +const UI_BAMBOO := Color(0.30, 0.23, 0.16, 1.0) +const UI_BAMBOO_DARK := Color(0.13, 0.10, 0.070, 1.0) +const UI_MUTED_JADE := Color(0.11, 0.28, 0.25, 1.0) +const UI_PARCHMENT_TEXT := Color(0.86, 0.84, 0.76, 1.0) +const UI_DISABLED_TEXT := Color(0.46, 0.45, 0.39, 1.0) +const UI_SILK_WASH := Color(0.55, 0.56, 0.48, 1.0) +const UI_SILK_FIBER := Color(0.12, 0.12, 0.10, 1.0) +const UI_SOOT_EDGE := Color(0.025, 0.024, 0.022, 1.0) +const UI_BONE_PAPER := Color(0.56, 0.54, 0.47, 0.995) +const UI_INK_WASH := Color(0.060, 0.060, 0.054, 1.0) const UI_DARK_JADE := Color(0.055, 0.18, 0.13, 1.0) const UI_JADE_EDGE := Color(0.12, 0.36, 0.25, 1.0) const UI_SEAL_RED := Color(0.64, 0.055, 0.032, 1.0) const UI_SEAL_RED_DARK := Color(0.28, 0.020, 0.014, 1.0) const UI_CHARCOAL_WASH := Color(0.045, 0.026, 0.016, 1.0) -const UI_SCROLL_CENTER := Color(0.74, 0.58, 0.32, 0.996) -const UI_SCROLL_EDGE := Color(0.43, 0.25, 0.095, 0.996) -const UI_OLD_SILK := Color(0.61, 0.43, 0.20, 0.997) -const UI_BURNT_PAPER := Color(0.33, 0.19, 0.075, 0.996) -const UI_BRUSH_RULE := Color(0.12, 0.060, 0.026, 0.98) +const UI_SCROLL_CENTER := Color(0.58, 0.55, 0.47, 0.996) +const UI_SCROLL_EDGE := Color(0.31, 0.28, 0.22, 0.996) +const UI_OLD_SILK := Color(0.48, 0.44, 0.36, 0.997) +const UI_BURNT_PAPER := Color(0.22, 0.18, 0.13, 0.996) +const UI_BRUSH_RULE := Color(0.065, 0.060, 0.052, 0.98) const MAP_SCROLL_FRAME_PADDING := 12.0 const SPEAKER_DISPLAY_NAMES := { "Cao Cao": "조조", @@ -672,7 +672,7 @@ func _make_panel_style(fill: Color, border: Color, border_width: int, radius: in style.content_margin_right = margin style.content_margin_top = margin style.content_margin_bottom = margin - style.anti_aliasing = false + style.anti_aliasing = true if shadow_size > 0: style.shadow_color = Color(0.0, 0.0, 0.0, 0.48) style.shadow_offset = Vector2(3, 4) @@ -708,131 +708,152 @@ func _apply_panel_style(panel: PanelContainer, variant: String) -> void: if panel == null: return var fill := UI_DARK_LACQUER - var border := UI_OLD_BRONZE + var border := UI_TARNISHED_BRONZE var border_width := 3 - var radius := 0 + var radius := 6 var margin := 10 var shadow_size := 6 match variant: "paper": - fill = Color(0.54, 0.36, 0.14, 0.997) + fill = Color(0.34, 0.32, 0.27, 0.997) border = UI_LACQUER_EDGE border_width = 15 + radius = 8 margin = 24 shadow_size = 24 "edict": - fill = Color(0.67, 0.49, 0.24, 0.998) + fill = Color(0.56, 0.54, 0.47, 0.998) border = UI_BRUSH_RULE - border_width = 10 + border_width = 8 + radius = 7 margin = 18 shadow_size = 12 "edict_compact": - fill = Color(0.55, 0.36, 0.15, 0.996) + fill = Color(0.40, 0.39, 0.33, 0.996) border = UI_BRUSH_RULE - border_width = 4 + border_width = 3 + radius = 5 margin = 6 shadow_size = 4 "notice_edict": - fill = Color(0.62, 0.42, 0.17, 0.998) + fill = Color(0.42, 0.40, 0.34, 0.998) border = UI_LACQUER_EDGE - border_width = 9 + border_width = 7 + radius = 7 margin = 14 shadow_size = 14 "seal": - fill = Color(0.12, 0.014, 0.008, 1.0) - border = UI_OLD_BRONZE - border_width = 5 + fill = Color(0.080, 0.030, 0.022, 1.0) + border = UI_TARNISHED_BRONZE + border_width = 4 + radius = 6 margin = 10 "speaker_seal": - fill = Color(0.36, 0.025, 0.016, 0.995) - border = UI_OLD_BRONZE - border_width = 4 + fill = Color(0.26, 0.035, 0.030, 0.995) + border = UI_TARNISHED_BRONZE + border_width = 3 + radius = 6 margin = 9 "portrait": fill = UI_LACQUER_EDGE - border = UI_OLD_BRONZE - border_width = 5 + border = UI_TARNISHED_BRONZE + border_width = 4 + radius = 7 margin = 3 "dialogue": - fill = Color(0.055, 0.028, 0.016, 0.982) - border = Color(0.30, 0.18, 0.075, 1.0) - border_width = 11 + fill = Color(0.045, 0.045, 0.040, 0.982) + border = Color(0.18, 0.17, 0.14, 1.0) + border_width = 8 + radius = 8 margin = 20 shadow_size = 18 "speech_scroll": - fill = Color(0.61, 0.47, 0.26, 0.996) - border = Color(0.17, 0.085, 0.034, 0.98) - border_width = 7 + fill = Color(0.58, 0.55, 0.48, 0.996) + border = Color(0.13, 0.12, 0.10, 0.98) + border_width = 5 + radius = 7 margin = 15 shadow_size = 6 "hud_info": - fill = Color(0.075, 0.050, 0.034, 0.88) - border = Color(0.31, 0.22, 0.12, 0.96) - border_width = 3 + fill = Color(0.045, 0.050, 0.048, 0.90) + border = Color(0.20, 0.24, 0.21, 0.96) + border_width = 2 + radius = 6 margin = 7 shadow_size = 3 "target_hint": - fill = Color(0.11, 0.070, 0.040, 0.94) - border = UI_TARNISHED_BRONZE - border_width = 4 + fill = Color(0.050, 0.070, 0.062, 0.94) + border = UI_JADE_EDGE + border_width = 3 + radius = 7 margin = 9 shadow_size = 6 "notice": - fill = Color(0.070, 0.020, 0.014, 0.982) + fill = Color(0.080, 0.030, 0.025, 0.982) border = UI_SEAL_RED border_width = 3 + radius = 6 margin = 9 "map": - fill = Color(0.11, 0.060, 0.024, 1.0) + fill = Color(0.052, 0.052, 0.046, 1.0) border = UI_INK_WASH - border_width = 6 + border_width = 4 + radius = 6 margin = 4 "silk_map": - fill = Color(0.42, 0.27, 0.095, 0.995) + fill = Color(0.32, 0.31, 0.25, 0.995) border = UI_BRUSH_RULE - border_width = 7 + border_width = 5 + radius = 7 margin = 10 shadow_size = 10 "compact": - fill = Color(0.10, 0.055, 0.030, 0.93) + fill = Color(0.045, 0.048, 0.044, 0.93) border = UI_TARNISHED_BRONZE - border_width = 4 + border_width = 3 + radius = 7 margin = 8 shadow_size = 8 "bamboo_slips": - fill = Color(0.43, 0.28, 0.11, 0.992) + fill = Color(0.28, 0.23, 0.17, 0.992) border = UI_BRUSH_RULE - border_width = 5 + border_width = 4 + radius = 6 margin = 10 shadow_size = 6 "caption": - fill = Color(0.17, 0.030, 0.017, 0.988) - border = UI_OLD_BRONZE - border_width = 3 + fill = Color(0.060, 0.050, 0.044, 0.988) + border = UI_TARNISHED_BRONZE + border_width = 2 + radius = 5 margin = 5 shadow_size = 2 "result_tablet": - fill = Color(0.47, 0.29, 0.10, 0.997) + fill = Color(0.30, 0.27, 0.22, 0.997) border = UI_LACQUER_EDGE - border_width = 15 + border_width = 11 + radius = 8 margin = 24 shadow_size = 24 "result_victory_tablet": - fill = Color(0.54, 0.36, 0.15, 0.997) - border = UI_OLD_BRONZE - border_width = 14 + fill = Color(0.27, 0.34, 0.28, 0.997) + border = UI_JADE_EDGE + border_width = 10 + radius = 8 margin = 24 shadow_size = 22 "result_defeat_tablet": - fill = Color(0.13, 0.032, 0.014, 0.997) + fill = Color(0.10, 0.035, 0.028, 0.997) border = UI_SEAL_RED_DARK - border_width = 14 + border_width = 10 + radius = 8 margin = 24 shadow_size = 24 "command_seal": - fill = Color(0.065, 0.020, 0.012, 0.992) + fill = Color(0.050, 0.045, 0.040, 0.992) border = UI_TARNISHED_BRONZE - border_width = 5 + border_width = 3 + radius = 7 margin = 10 shadow_size = 9 _: @@ -843,7 +864,7 @@ func _apply_panel_style(panel: PanelContainer, variant: String) -> void: func _make_button_style(fill: Color, border: Color, border_width: int) -> StyleBoxFlat: - var style := _make_panel_style(fill, border, border_width, 0, 10, 0) + var style := _make_panel_style(fill, border, border_width, 6, 10, 0) style.set_border_width(SIDE_TOP, border_width + 2) style.set_border_width(SIDE_BOTTOM, border_width + 2) style.set_border_width(SIDE_LEFT, border_width + 1) @@ -916,13 +937,13 @@ func _apply_control_font(control: Control, bold: bool = false) -> void: func _apply_button_style(button: Button, important: bool = false) -> void: if button == null: return - var normal_fill := Color(0.36, 0.035, 0.020, 0.99) if important else Color(0.20, 0.095, 0.035, 0.98) - var hover_fill := Color(0.46, 0.075, 0.035, 1.0) if important else Color(0.30, 0.16, 0.060, 1.0) - var pressed_fill := Color(0.070, 0.024, 0.014, 1.0) + var normal_fill := Color(0.28, 0.055, 0.040, 0.99) if important else Color(0.070, 0.085, 0.078, 0.98) + var hover_fill := Color(0.36, 0.080, 0.055, 1.0) if important else Color(0.095, 0.135, 0.118, 1.0) + var pressed_fill := Color(0.030, 0.036, 0.034, 1.0) button.add_theme_stylebox_override("normal", _make_button_style(normal_fill, UI_TARNISHED_BRONZE, 2)) - button.add_theme_stylebox_override("hover", _make_button_style(hover_fill, UI_OLD_BRONZE, 2)) - button.add_theme_stylebox_override("pressed", _make_button_style(pressed_fill, UI_OLD_BRONZE, 2)) - button.add_theme_stylebox_override("focus", _make_button_style(Color(0.31, 0.16, 0.060, 0.98), UI_OLD_BRONZE, 2)) + button.add_theme_stylebox_override("hover", _make_button_style(hover_fill, UI_JADE_EDGE if not important else UI_SEAL_RED, 2)) + button.add_theme_stylebox_override("pressed", _make_button_style(pressed_fill, UI_JADE_EDGE, 2)) + button.add_theme_stylebox_override("focus", _make_button_style(Color(0.080, 0.120, 0.105, 0.98), UI_JADE_EDGE, 2)) button.add_theme_stylebox_override("disabled", _make_button_style(Color(0.10, 0.065, 0.040, 0.88), UI_RICE_PAPER_DARK, 1)) button.add_theme_color_override("font_color", UI_PARCHMENT_TEXT) button.add_theme_color_override("font_hover_color", UI_PARCHMENT_TEXT) @@ -1305,7 +1326,7 @@ func _set_control_tree_tooltip(node: Node, tooltip: String) -> void: func _make_toolbar_icon(kind: String) -> Texture2D: var image := Image.create(32, 32, false, Image.FORMAT_RGBA8) image.fill(Color(0, 0, 0, 0)) - var ink := Color(0.96, 0.82, 0.50, 1.0) + var ink := Color(0.82, 0.84, 0.78, 1.0) var shadow := Color(0.07, 0.028, 0.012, 0.82) var red := Color(UI_SEAL_RED.r, UI_SEAL_RED.g, UI_SEAL_RED.b, 1.0) match kind: @@ -2464,7 +2485,7 @@ func _create_hud() -> void: cell_info_label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART cell_info_label.custom_minimum_size = Vector2(354, 38) cell_info_label.size_flags_horizontal = Control.SIZE_EXPAND_FILL - _apply_label_style(cell_info_label, Color(0.92, 0.78, 0.54, 1.0), 12) + _apply_label_style(cell_info_label, UI_PARCHMENT_TEXT, 12) cell_info_row.add_child(cell_info_label) forecast_panel = PanelContainer.new() @@ -2485,7 +2506,7 @@ func _create_hud() -> void: forecast_label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART forecast_label.custom_minimum_size = Vector2(354, 46) forecast_label.size_flags_horizontal = Control.SIZE_EXPAND_FILL - _apply_label_style(forecast_label, Color(0.95, 0.80, 0.56, 1.0), 13) + _apply_label_style(forecast_label, UI_PARCHMENT_TEXT, 13) forecast_row.add_child(forecast_label) inventory_label = Label.new() @@ -2737,7 +2758,7 @@ func _create_hud() -> void: opening_background.expand_mode = TextureRect.EXPAND_IGNORE_SIZE opening_background.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_COVERED opening_background.texture = _load_art_texture(TITLE_BACKGROUND_PATH) - opening_background.modulate = Color(0.76, 0.62, 0.43, 0.98) + opening_background.modulate = Color(0.88, 0.88, 0.82, 0.98) opening_prologue_root.add_child(opening_background) var opening_dim := ColorRect.new() @@ -2767,7 +2788,7 @@ func _create_hud() -> void: opening_portrait.expand_mode = TextureRect.EXPAND_IGNORE_SIZE opening_portrait.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_COVERED opening_portrait.texture = _load_art_texture(TITLE_PORTRAIT_PATH) - opening_portrait.modulate = Color(1.0, 0.92, 0.80, 0.96) + opening_portrait.modulate = Color(0.98, 0.96, 0.91, 0.96) opening_portrait.mouse_filter = Control.MOUSE_FILTER_IGNORE opening_shell.add_child(opening_portrait) @@ -2949,7 +2970,7 @@ func _create_hud() -> void: briefing_camp_overview_texture.set_anchors_preset(Control.PRESET_FULL_RECT) briefing_camp_overview_texture.expand_mode = TextureRect.EXPAND_IGNORE_SIZE briefing_camp_overview_texture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED - briefing_camp_overview_texture.modulate = Color(0.90, 0.78, 0.56, 0.95) + briefing_camp_overview_texture.modulate = Color(0.88, 0.87, 0.80, 0.95) camp_thumbnail_stack.add_child(briefing_camp_overview_texture) briefing_camp_overview_fallback_label = Label.new() @@ -10252,7 +10273,7 @@ func _make_chapter_scenario_thumbnail(scenario: Dictionary, tooltip_text: String texture_rect.set_anchors_preset(Control.PRESET_FULL_RECT) texture_rect.expand_mode = TextureRect.EXPAND_IGNORE_SIZE texture_rect.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_COVERED - texture_rect.modulate = Color(0.92, 0.82, 0.62, 0.96) + texture_rect.modulate = Color(0.88, 0.87, 0.80, 0.96) texture_rect.tooltip_text = tooltip_text var texture := _load_art_texture(_chapter_scenario_background_path(str(scenario.get("id", "")))) texture_rect.texture = texture diff --git a/tools/smoke_visual_assets.gd b/tools/smoke_visual_assets.gd index ae151b8..60ce0ed 100644 --- a/tools/smoke_visual_assets.gd +++ b/tools/smoke_visual_assets.gd @@ -3264,18 +3264,18 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void: for clutter in ["목표|", "주의|", "현황|", "경고|"]: if mission_text.contains(clutter): failures.append("mission panel should avoid old verbose marker `%s`: %s" % [clutter, mission_text]) - _check_panel_style_fill(failures, scene.briefing_panel, "briefing panel", Color(0.54, 0.36, 0.14, 0.997)) - _check_panel_style_frame(failures, scene.briefing_panel, "briefing panel", Color(0.035, 0.014, 0.008, 1.0), 16) - _check_panel_style_fill(failures, scene.briefing_objective_panel, "briefing objective edict panel", Color(0.67, 0.49, 0.24, 0.998)) - _check_panel_style_frame(failures, scene.briefing_objective_panel, "briefing objective edict panel", Color(0.12, 0.060, 0.026, 0.98), 10) - _check_panel_style_fill(failures, scene.briefing_camp_overview_panel, "briefing silk map panel", Color(0.42, 0.27, 0.095, 0.995)) - _check_panel_style_frame(failures, scene.briefing_camp_overview_panel, "briefing silk map panel", Color(0.12, 0.060, 0.026, 0.98), 7) - _check_panel_style_fill(failures, scene.dialogue_panel, "dialogue panel", Color(0.055, 0.028, 0.016, 0.982)) - _check_panel_style_frame(failures, scene.dialogue_panel, "dialogue panel", Color(0.30, 0.18, 0.075, 1.0), 12) - _check_panel_style_fill(failures, scene.auto_end_turn_prompt_panel, "auto end turn prompt panel", Color(0.055, 0.025, 0.014, 0.988)) - _check_panel_style_fill(failures, scene.dialogue_portrait_panel, "dialogue portrait panel", Color(0.035, 0.014, 0.008, 1.0)) - _check_panel_style_fill(failures, scene.dialogue_speaker_panel, "dialogue speaker seal panel", Color(0.36, 0.025, 0.016, 0.995)) - _check_panel_style_fill(failures, scene.dialogue_text_panel, "dialogue text scroll panel", Color(0.61, 0.47, 0.26, 0.996)) + _check_panel_style_fill(failures, scene.briefing_panel, "briefing panel", Color(0.34, 0.32, 0.27, 0.997)) + _check_panel_style_frame(failures, scene.briefing_panel, "briefing panel", Color(0.025, 0.023, 0.020, 1.0), 16) + _check_panel_style_fill(failures, scene.briefing_objective_panel, "briefing objective edict panel", Color(0.56, 0.54, 0.47, 0.998)) + _check_panel_style_frame(failures, scene.briefing_objective_panel, "briefing objective edict panel", Color(0.065, 0.060, 0.052, 0.98), 8) + _check_panel_style_fill(failures, scene.briefing_camp_overview_panel, "briefing silk map panel", Color(0.32, 0.31, 0.25, 0.995)) + _check_panel_style_frame(failures, scene.briefing_camp_overview_panel, "briefing silk map panel", Color(0.065, 0.060, 0.052, 0.98), 5) + _check_panel_style_fill(failures, scene.dialogue_panel, "dialogue panel", Color(0.045, 0.045, 0.040, 0.982)) + _check_panel_style_frame(failures, scene.dialogue_panel, "dialogue panel", Color(0.18, 0.17, 0.14, 1.0), 9) + _check_panel_style_fill(failures, scene.auto_end_turn_prompt_panel, "auto end turn prompt panel", Color(0.050, 0.045, 0.040, 0.992)) + _check_panel_style_fill(failures, scene.dialogue_portrait_panel, "dialogue portrait panel", Color(0.025, 0.023, 0.020, 1.0)) + _check_panel_style_fill(failures, scene.dialogue_speaker_panel, "dialogue speaker seal panel", Color(0.26, 0.035, 0.030, 0.995)) + _check_panel_style_fill(failures, scene.dialogue_text_panel, "dialogue text scroll panel", Color(0.58, 0.55, 0.48, 0.996)) if scene.screen_backdrop == null: failures.append("ancient briefing screen should create an ink-wash backdrop") else: @@ -3301,10 +3301,10 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void: _check_bamboo_gutter_row(failures, scene.mission_detail_panel, "mission detail bamboo gutters") _check_edict_marker_stack(failures, scene.briefing_objective_panel, "briefing objective edict markers") _check_edict_marker_stack(failures, scene.mission_detail_panel, "mission detail edict markers") - _check_panel_style_fill(failures, scene.cell_info_panel, "HUD terrain info panel", Color(0.075, 0.050, 0.034, 0.88)) - _check_panel_style_frame(failures, scene.cell_info_panel, "HUD terrain info panel", Color(0.31, 0.22, 0.12, 0.96), 3) - _check_panel_style_fill(failures, scene.forecast_panel, "HUD forecast info panel", Color(0.075, 0.050, 0.034, 0.88)) - _check_panel_style_frame(failures, scene.forecast_panel, "HUD forecast info panel", Color(0.31, 0.22, 0.12, 0.96), 3) + _check_panel_style_fill(failures, scene.cell_info_panel, "HUD terrain info panel", Color(0.045, 0.050, 0.048, 0.90)) + _check_panel_style_frame(failures, scene.cell_info_panel, "HUD terrain info panel", Color(0.20, 0.24, 0.21, 0.96), 2) + _check_panel_style_fill(failures, scene.forecast_panel, "HUD forecast info panel", Color(0.045, 0.050, 0.048, 0.90)) + _check_panel_style_frame(failures, scene.forecast_panel, "HUD forecast info panel", Color(0.20, 0.24, 0.21, 0.96), 2) if scene.cell_info_icon == null: failures.append("HUD terrain info panel should expose an icon chip") if scene.forecast_icon == null: @@ -3454,9 +3454,9 @@ func _check_ancient_ui_theme(failures: Array[String]) -> void: if scene.briefing_camp_overview_fallback_label == null or scene.briefing_camp_overview_fallback_label.text != "비단 전장도": failures.append("briefing map fallback should read as an old campaign map") scene._apply_panel_style(scene.result_panel, "result_victory_tablet") - _check_panel_style_fill(failures, scene.result_panel, "victory result panel", Color(0.54, 0.36, 0.15, 0.997)) + _check_panel_style_fill(failures, scene.result_panel, "victory result panel", Color(0.27, 0.34, 0.28, 0.997)) scene._apply_panel_style(scene.result_panel, "result_defeat_tablet") - _check_panel_style_fill(failures, scene.result_panel, "defeat result panel", Color(0.13, 0.032, 0.014, 0.997)) + _check_panel_style_fill(failures, scene.result_panel, "defeat result panel", Color(0.10, 0.035, 0.028, 0.997)) if not scene._format_victory_result_text().contains("승리"): failures.append("victory result should use Korean title") if not scene._format_defeat_result_text().contains("패배"): @@ -3597,8 +3597,9 @@ func _check_panel_style_frame(failures: Array[String], panel: PanelContainer, la failures.append("%s border mismatch: %s" % [label, str(style.border_color)]) if style.get_border_width(SIDE_LEFT) != expected_width: failures.append("%s border width mismatch: %d" % [label, style.get_border_width(SIDE_LEFT)]) - if style.get_corner_radius(CORNER_TOP_LEFT) != 0: - failures.append("%s should use square old-frame corners" % label) + var radius := style.get_corner_radius(CORNER_TOP_LEFT) + if radius < 4 or radius > 8: + failures.append("%s should use restrained rounded corners, got %d" % [label, radius]) func _colors_nearly_equal(left: Color, right: Color) -> bool: @@ -3811,7 +3812,7 @@ func _check_battle_unit_list_panel(failures: Array[String]) -> void: if scene.battle_unit_list_panel == null or not scene.battle_unit_list_panel.visible: failures.append("battle unit list panel should open from the top toolbar") else: - _check_panel_style_fill(failures, scene.battle_unit_list_panel, "battle unit list panel", Color(0.10, 0.055, 0.030, 0.93)) + _check_panel_style_fill(failures, scene.battle_unit_list_panel, "battle unit list panel", Color(0.045, 0.048, 0.044, 0.93)) if scene.battle_unit_list_title_label == null or not scene.battle_unit_list_title_label.text.contains("아군"): failures.append("battle unit list should open on the ally tab") if scene.battle_unit_list_rows == null or scene.battle_unit_list_rows.get_child_count() < 2: